您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?
我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.
此代码记录66次:
(function timer() {
for (var i=0; i<=5; i++) {
setTimeout(function clog() {console.log(i)}, i*1000);
}
})();
Run Code Online (Sandbox Code Playgroud)
但是这段代码......
(function timer() {
for (let i=0; i<=5; i++) {
setTimeout(function clog() {console.log(i)}, i*1000);
}
})();
Run Code Online (Sandbox Code Playgroud)
...记录以下结果:
0
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
为什么?
是因为不同地let绑定到内部范围每个项目并var保持最新值i?
我在网上看到这样的例子:
const roles = [];
for (i of roles) {
roleObj[roles[i].key] = true;
}
Run Code Online (Sandbox Code Playgroud)
我们不需要声明变量i,就像这样吗?
for (let i of roles) {
roleObj[roles[i].key] = true;
}
Run Code Online (Sandbox Code Playgroud)
大量的文章正在推广第一个例子,这对我来说似乎很愚蠢:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of