面试代码题(闭包相关)

发布时间 2023-08-01 11:49:12作者: Delusional_man
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 

反证成功