为什么我不能得到一个 javascript 引起的提升
Why can't I get a javascript caused by hoisting
我正在努力解决提升问题,我正在学习代码学校教程 (es2015),但我似乎无法让他们的代码正常工作。 (他们只显示部分代码,下面是我的版本)
function _myfunc(callback){
callback();
}
function display(names){
for(var i in names){
_mfunc(function(){
console.log(names[i]);
});
}
}
display(["Sam", "Tyler", "brook", "alex"]);
显然 var i
被提升到 for
循环之上,我应该在控制台中看到的是 alex
被安慰了四次。但我看到所有四个名字都得到了安慰。 (然后我打算使用 let
而不是 var
来让它工作,但我需要在让它工作之前刹车)
你能帮我 fix/brake 代码吗,这样我就可以看到提升工作与预期结果不符。
这将是破解密码的一种方式:
function display(names){
for(var i in names){
setTimeout(function() {
console.log(names[i]);
}, 0);
}
}
display(["Sam", "Tyler", "brook", "alex"]);
这里发生的是传递给 setTimeout
的回调函数被安排到 运行 循环完成之后。一旦它们都捕获了 i
变量,该变量在循环结束时具有值 3
- 它们都输出相同的值。
PS:我建议不要使用 for-in
遍历数组,而是使用带有计数器的普通 for
。
我正在努力解决提升问题,我正在学习代码学校教程 (es2015),但我似乎无法让他们的代码正常工作。 (他们只显示部分代码,下面是我的版本)
function _myfunc(callback){
callback();
}
function display(names){
for(var i in names){
_mfunc(function(){
console.log(names[i]);
});
}
}
display(["Sam", "Tyler", "brook", "alex"]);
显然 var i
被提升到 for
循环之上,我应该在控制台中看到的是 alex
被安慰了四次。但我看到所有四个名字都得到了安慰。 (然后我打算使用 let
而不是 var
来让它工作,但我需要在让它工作之前刹车)
你能帮我 fix/brake 代码吗,这样我就可以看到提升工作与预期结果不符。
这将是破解密码的一种方式:
function display(names){
for(var i in names){
setTimeout(function() {
console.log(names[i]);
}, 0);
}
}
display(["Sam", "Tyler", "brook", "alex"]);
这里发生的是传递给 setTimeout
的回调函数被安排到 运行 循环完成之后。一旦它们都捕获了 i
变量,该变量在循环结束时具有值 3
- 它们都输出相同的值。
PS:我建议不要使用 for-in
遍历数组,而是使用带有计数器的普通 for
。