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
反证成功
标签:闭包,10,fn2,fn1,function,代码,面试,var From: https://www.cnblogs.com/Delusional-man/p/17596058.html