function box() {
let a = 1;
return function son() {
a++
console.log(a)
}
}
box()();
box()();
box()();
box()();
function box() {
let a = 1;
return function son() {
a++
console.log(a)
}
}
box()();
box()();
box()();
box()();
你想要的效果:
let b = box()
b()
b()
b()
b()
实际上你写的:
let a = box()
a()
let b = box()
b()
let c = box()
c()
let d = box()
d()
看出差别了吗?你实际上每次执行都不是同一个函数,所以自然不会得到你想象中的结果。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答889 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
因为每次都生成了新的闭包
闭包保存了当前上下文环境,每次 box() 都会生成一个新的上下文环境。