【发布时间】:2017-07-10 12:21:16
【问题描述】:
我想了解javascript引擎如何以及何时将值传递给回调函数,我尝试过调试和在线查找但无法找到确切答案,请考虑以下示例:
for(var i = 0; i < 4; i++) {
console.log("outside callback " + i + " ");
setTimeout(function test(){
console.log("inside callback " + i + " ");
},100);
}
这会打印以下输出
外部回调 0
外部回调 1
外部回调 2
外部回调 3
内部回调 4
内部回调 4
内部回调 4
内部回调 4
如果我只是使用 let 关键字更改 i 变量的声明,如下所示:
for(let i = 0; i < 4; i++) {
console.log("outside callback " + i + " ");
setTimeout(function test(){
console.log("inside callback " + i + " ");
},100);
}
结果如下:
外部回调 0
外部回调 1
外部回调 2
外部回调 3
内部回调 0
内部回调 1
内部回调 2
内部回调 3
在 Chrome 中调试时,它在第一个示例中显示 i 作为测试函数的闭包范围,在第二个示例中显示块范围。
【问题讨论】:
-
变量范围与“当javascript引擎将值传递给回调函数时”有什么关系?
标签: javascript closures v8