function foo() {
console.log( a ); // 2
}
function bar() {
var a = 3;
foo();
}
var a = 2;
bar();
这里我明白foo通过词法作用域链找到上一级全局 a=2
问题在下面
function foo(a) {
console.log( a ); // 3(不是2!)
}
function bar() {
var a = 3;
foo(a);
}
var a = 2;
bar();
为什么一旦传参给foo,答案就变3了?难道因为参数的值通过动态作用域查找么?
JS不是没有动态作用域么?是什么原理?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…