词法作用域
什么是词法作用域
作用域共有两种主要的工作模型——词法作用域和动态作用域,JS采用词法作用域
简单地说,词法作用域就是定义在词法阶段的作用域。换句话说,词法作用域是由你在写代码时将变量和块作用域写在哪里来决定的
由上面对词法作用域的描述可知,词法作用域的创建发生在预编译阶段,因为词法阶段属于预编译的一个过程
如果还是感觉不太理解,请考虑下面代码:
function foo(a) {
var b = a * 2;
function bar(c) {
console.log( a, b, c );
}
bar( b * 3 );
}
foo( 2 ); // 2, 4, 12
在这个例子中有三个逐层嵌套的词法作用域(在此我们称之为气泡),看下图:
1包含着整个全局作用域,其中只有一个标识符:foo
2包含着foo 所创建的作用域,其中有三个标识符:a、bar 和b
3包含着bar 所创建的作用域,其中只有一个标识符:c
LHS与RHS的逐层查找便是逐层查找词法作用域,由内到外,由近到远。从外向内访问作用域是禁止的
无论函数在哪里被调用,也无论它如何被调用,它的词法作用域都只由函数被声明时所处的位置决定
function foo(){
var a = 200;
bar();
}
function bar