面试题答案
一键面试- 添加
x = 2;
前的输出分析:- 这里涉及到闭包的概念。
outer
函数返回inner
函数,inner
函数能够访问其外部函数outer
中的变量x
。 - 当
var closure = outer();
执行时,outer
函数执行,x
被赋值为1
,然后返回inner
函数并赋值给closure
。 - 当
closure();
执行时,inner
函数查找并输出x
的值,此时x
的值为1
,所以输出1
。
- 这里涉及到闭包的概念。
- 添加
x = 2;
后的输出分析:- 如果在调用
closure();
之前添加x = 2;
这行代码。 - 由于没有声明
x
,这里的x
会被当作全局变量处理(在非严格模式下)。 inner
函数访问的x
是其词法作用域中的x
,也就是outer
函数中的x
,而不是全局变量x
。- 所以添加
x = 2;
后,调用closure();
输出依然是1
,因为inner
函数访问的是闭包中outer
函数内定义的x
,不受全局变量x
的影响。
- 如果在调用
总结:在调用closure();
之前添加x = 2;
,输出结果不变,依然为1
,原因是闭包中的inner
函数访问的是其词法作用域(outer
函数内部)的x
,而非全局变量x
。