面试代码题(闭包相关)
var a = 10;
function fn1() {
return a + 10;
}
function fn2() {
var a = 20;
return fn1();
}
console.log(fn2());
第一反应是调用fn1,逐级往上查找a变量,但是经过提醒发现,fn1在定义的时候就已经产生了一个闭包,a就是对于全局a的引用,所以答案是20
因为在JS中,变量的作用域是在函数定义时就决定了
测试一下,如果将上面的 var a = 10; 注释掉,运行报错: ReferenceError: a is not defined

浙公网安备 33010602011771号