var a = 2;
function foo() {
console.log( a );
}
function bar() {
var a = 3;
foo();
}
bar();
// 1.如果处于词法作用域,也就是现在的javascript环境。
变量a首先在foo()函数中查找,没有找到。
于是顺着作用域链到全局作用域中查找,找到并赋值为2。
所以控制台输出2
// 2.如果处于动态作用域,同样地,变量a首先在foo()中查找,没有找到。
这里会顺着调用栈在调用foo()函数的地方,也就是bar()函数中查找,找到并赋值为3。
所以控制台输出3