这是一个思维练习。我没有对这段代码做任何事情,目的是更好地理解闭包是如何工作的。
思考过程:
- 在全局范围内 x === 10。
- outer() 函数被调用。
- x === 20 在全局范围和本地范围。
- inner() 函数被调用。
- 表示'var x'的右侧。
- 在 x + 20 中,因为 x 没有在本地范围内定义,所以它搜索外部范围并找到 x === 20。
- 变量 x = 20 + 20。
- 变量 x === 40。
- 返回x。
- 结果 === 40。
然而,答案是20,这是为什么呢?
var x = 10;
function outer () {
x = 20;
function inner () {
var x = x + 20;
return x;
}
inner();
}
outer();
var result = x;
最佳答案
当 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;
关于javascript - JS 闭包 - x 的值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51509554/