首页 > 解决方案 > 为什么 JavaScript 闭包不能与双括号一起正常工作?

问题描述

当我使用双括号时,此代码返回 1

function a(){
  let x = 0;
  return function b(){
    x = x + 1;
    return x;
  }
}
a()();
a()();
console.log(a()());

但是这段代码返回 3。

function a(){
  let x = 0;
  return function b(){
    x = x +1;
    return x;
  }
}
let y = a();
y();
y();
console.log(y());

为什么会这样?

标签: javascript

解决方案


第一个示例运行a 了三个不同的时间,因此a第二次或第三次的执行对其他调用的返回值没有影响a

但是,在您的第二个示例中,您将分配给从单次调用y返回的函数,该函数设置a了闭包。所以现在y持有对中x使用的变量的引用a。第二次调用y和第三次调用使用与第一次调用保持相同的单一范围,因此在整个代码中使用a相同的值。x最后,由于您调用y了 3 次,相同的x值会增加 3 次,结果就是您得到3了结果。


推荐阅读