作用域
变量作用域:就是一个变量可以使用的范围。
三种作用域 :
- js中首先有一个最外层的作用域,
全局作用域
; - js中可以通过函数来创建一个独立作用域称为
函数作用域
,函数可以嵌套,所以作用域也可以嵌套; - es6中新增了
块级作用域
(大括号,比如:if{},for(){},while(){}…);
注意: es6作用域,只适用于const,let
自由变量
自由变量的概念:
当前作用域没有定义的变量,但是被使用了,就会一层一层往上查找,直到找到为止;如果到全局作用域都没有找到,则会报错
作用域链
自由变量的向上级作用域一层一层查找,直到找到为止,最高找到全局作用域,就形成了作用域链。
变量提升(预解析)
js是单线程的,代码在运行之前,会把带有var和function声明的变量提升到作用域的最前面;let const不存在变量提升
注意:函数的预解析要高于变量的预解析