我正试图让我的头脑一直在提升,我正在通过一个代码学教程(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
来使其正常工作,但我需要在它开始工作之前制动它。
你能帮我修理/制动代码,这样我就可以看到吊装工作不符合预期的结果。
答案 0 :(得分:1)
这将是打破代码的一种方法:
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
代替计数器。