javascript - 为什么 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());
为什么会这样?
解决方案
第一个示例运行a
了三个不同的时间,因此a
第二次或第三次的执行对其他调用的返回值没有影响a
。
但是,在您的第二个示例中,您将分配给从单次调用y
返回的函数,该函数设置a
了闭包。所以现在y
持有对中x
使用的变量的引用a
。第二次调用y
和第三次调用使用与第一次调用保持相同的单一范围,因此在整个代码中使用a
相同的值。x
最后,由于您调用y
了 3 次,相同的x
值会增加 3 次,结果就是您得到3
了结果。
推荐阅读
- java - Java 8 可选:在两个可能为空的值之间进行选择
- java - 如何解决 alfresco sdk 中的 alfresco webscripts 中的 CORS 错误?
- java - 无法从 App Engine flex Java 上的不同项目连接到 Cloud SQL
- bash - 打印包含哈希的变量不会给我任何输出
- javascript - 模态框以奇怪的效果打开
- java - 使用 spring mvc 进行 Couchbase crud 操作
- javascript - 评估语句中的按钮文本
- python - matplotlib 中基于坐标的字体大小
- android-studio - 不要使用 Flutter 和 Android Studio 进入库代码
- video - Ubuntu 16 上的 FFMPEG libx264