【发布时间】:2022-01-23 07:55:39
【问题描述】:
我觉得我对闭包的了解几乎在那里,但我正在努力理解为什么第一个代码 sn-p 记录 0(是一个陈旧的闭包)但是,第二个代码sn-p 工作并记录更新的值..
这是某种参考问题吗?
在第一个例子中,我们是不是没有跟踪 count 的引用,只将它的初始值赋给 message?
通过在 log 函数中移动 message 变量,我们是否以某种方式告诉 JS 跟踪计数值的引用?
function createIncrement() {
let count = 0;
function increment() {
count++;
}
let message = count;
function log() {
console.log(message);
}
return [increment, log];
}
const [increment, log] = createIncrement();
increment();
log();
// this will log 0
function createIncrement() {
let count = 0;
function increment() {
count++;
}
function log() {
let message = count;
console.log(message);
}
return [increment, log];
}
const [increment, log] = createIncrement();
increment();
log();
// this will log 1
【问题讨论】:
-
"在第一个示例中,我们是否没有跟踪 count 的引用,而只将其初始值分配给 message?" - 是的。闭包跟踪
message的引用,它只有count的初始值,但不会被log闭包更新。
标签: javascript closures