这是一个思想练习。我对这段代码没有做任何事情,目的是更好地了解闭包是如何工作的。
思考过程:
但是,答案是20。为什么?
Range("I1044")
答案 0 :(得分:1)
调用inner()
函数时,第一件事是var x
。
这意味着JavaScript解释器首先创建一个名为x
的变量,并为其分配undefined
。
然后,它运行赋值表达式x + 20
,它等效于undefined + 20
,即NaN
。
您的变量result
与inner()
函数无关,因为您有一个局部变量(由于该var x
),并且您忽略了返回的结果。
换句话说,您的代码等效于此:
var x = 10;
function outer () {
x = 20;
}
outer();
var result = x;
答案 1 :(得分:0)
因为内部函数定义了局部var x,它将在外部隐藏全局变量。并且外部函数使用全局变量x并将其分配给20。显然,全局x为20。在调用原型链中的函数之前,JavaScript将定义每个局部变量。
var x = 10;
function outer () {
x = 20;
function inner () {
alert(x); // alert undefined
var x = x + 20;
return x;
}
inner();
}
outer();
var result = x;