了解预解析
JavaScript中,在代码执行之前,会在相应的执行环境中预先将一些东西解析到内存中
变量的预解析
- 在代码执行之前,编译器会将
var
关键字定义的变量进行声明,但不会进行赋值,在代码运行后,执行到改行代码后进行变量赋值
- 在代码执行之前,编译器会将
函数的预解析
- 赋值式函数的预解析与变量的预解析规则相同,在代码运行后,执行到改行代码后将变量赋值成一个函数
- 声明式函数会在代码执行之前进行声明并赋值为一个函数
预解析中的注意点
- 当函数名与变量名重名时,预解析阶段会以函数优先
- if语句内的变量和函数无论条件是否成立都会进行预解析
- return 后面代码虽然不执行,但也会进行预解析
函数名与变量名的命名与使用规范
- 变量名尽量以名词命名
- 函数名尽量以实现的功能名命名
- 函数使用时尽量先定义在进行调用,最好使用赋值式函数定义
变量作用域
- 全局作用域:每一个页面都是一个全局作用域
- 局部作用域:每一个函数内部就是一个局部作用域
作用域中变量的上下级关系和作用
- 上下级关系确定函数在哪个作用域下创建,变量取值都会在当前作用域中查找,如果没有查到就会像上级作用域查找,直到查到全局作用域,这个查找的过程叫做作用域链
作用域上下级关系——变量定义机制
- 一个变量定义在哪个作用域里面,就只能在当前作用域和下级作用域内使用,对于上级作用域无法使用该变量
作用域上下级关系——变量定义机制
- 当需要使用一个变量时,首先在当前作用域查找,如果定义了,则直接使用变量,如果没有定义则去上级作用域查找,如果到 window 也没有该变量则直接报错
作用域上下级关系——变量赋值机制
- 当需要给一个变量赋值时,会首先在当前作用查找,如果定义了,则直接进行赋值,如果没有定义,则去上级作用域查找,如果到 window 也没有该变量,则将该变量定义为一个全局变量后进行赋值
作用域中的预解析
- 全局作用域中的预解析:当页面打开时就进行预解析,只解析属于全局的内容
- 局部作用域中的预解析:当函数执行时解析函数内部,只解析属于函数内部的内容
- 注意:函数是单独进行预解析的,当函数执行时,先进行形参赋值,在进行预解析
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。