javascript - JS 闭包 - x 的值是多少?

标签 javascript scope closures

这是一个思维练习。我没有对这段代码做任何事情,目的是更好地理解闭包是如何工作的。

思考过程:

  1. 在全局范围内 x === 10。
  2. outer() 函数被调用。
  3. x === 20 在全局范围和本地范围。
  4. inner() 函数被调用。
  5. 表示'var x'的右侧。
  6. 在 x + 20 中,因为 x 没有在本地范围内定义,所以它搜索外部范围并找到 x === 20。
  7. 变量 x = 20 + 20。
  8. 变量 x === 40。
  9. 返回x。
  10. 结果 === 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/

相关文章:

javascript - onchange this.form.submit() 不适用于网络表单

javascript - Node 和 Chrome (V8) block 范围内的 const

swift - 将反向地理编码的结果分配给全局变量

Java : explain Closure in this code

javascript - 如何通过数组条目的值获取其 "rank"?

javascript 事件被应用于错误的元素

scope - PHP:无法从包含的文件访问对象

javascript - 为什么 javascript "for loop"对不同类型的对象有不同的行为

javascript - 如何在 Javascript 中覆盖基类构造函数

javascript - for、for-in、for-of循环中变量作用域规则不一致