javascript - Javascript 中的闭包和作用域
问题描述
你好。
for (var i=1; i<=5; i++) {
let j = i; // yay, block-scope for closure!
setTimeout( function timer(){
console.log( j );
}, j*1000 );
}
这是“你不懂 JS”系列的一段代码。我知道如果有 avar
而不是let
. 我知道要使其正常工作,该timer
函数需要对作用域进行闭包,每个作用域都包含 的值集中的一个值j
,例如:
for (var i=1; i<=5; i++) {
(function(j){
setTimeout( function timer(){
console.log( j );
}, j*1000 );
})( i );
}
这对我来说很有意义,因为循环的每次迭代都会创建新的范围。所以我的问题是:let
在循环中声明的变量是否为每次迭代创建一个新的范围。谢谢。
解决方案
推荐阅读
- python - tkinter.menu.config 不适用于 python GUI
- angular - Angular PWA - SwUpdate“可用”没有被触发
- jenkins - Jenkins groovy (SharedLibrary) 类无法访问 WorkflowScript 成员
- c# - 如何修复 Blazor 代码部分的 Intelisense 错误?
- python - 只有两次迭代的 for 循环中的内存错误
- go - 为什么传递的变量不在 html/template 中呈现?
- python - 在循环导入之间共享状态
- c++ - 为什么在我的实现中所有数组都对齐到 16 个字节?
- webrtc - Domain=org.webrtc.RTCPeerConnection Code=-1 "设置远程offer sdp失败:设置远程视频描述发送参数失败。"
- python - 为什么密度直方图在 y 轴上显示有点奇怪的值?