【发布时间】:2019-01-01 17:18:53
【问题描述】:
这是一个思考练习。我没有对这段代码做任何事情,目的是更好地理解闭包是如何工作的。
思考过程:
- 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;
【问题讨论】:
-
6. In x + 20, because x is not defined in local scope, it searches outer scope这是错误的。 -
@vol7ron
vars 被提升 - 当尝试分配时它确实在本地存在(值为undefined)。 -
@CertainPerformance 你说得对。让我举例说明为什么您不应该在欢乐时光之后上网! :P
标签: javascript scope closures