我是Javascript的新手,并尝试使用setTimeout
在for循环内循环数组,这是代码的一部分,所以默认情况下我有100毫秒。
我期望输出为1,2,3但是它的所有打印都是未定义的3次。
如果有人可以帮我解释为什么会有所帮助。
var allCars=['Car1','Car2','Car3'];
for(var i = 0; i < allCars.length; i++)
{
(function(temp){
setTimeout(function(temp){
console.log(allCars[temp]);
},100)})(i);
}
答案 0 :(得分:2)
setTimeout
不会将任何参数(除非您指定一个参数)传递给其回调,但是您指定了一个名为temp
的参数,该参数会隐藏外部作用域中的temp
。
var allCars=['Car1','Car2','Car3'];
for(var i = 0; i < allCars.length; i++)
{
(function(temp){
setTimeout(function(temp){ // This temp hides the temp on the line above
console.log(allCars[temp]);
},100)})(i);
}
只需从传递给setTimeout
的回调中删除参数,即可让外部temp
可见。
答案 1 :(得分:2)
这是更新的代码,它将产生正确的结果。将参数传递给setTimeout
时遇到的问题
这是更新的代码
var allCars=['Car1','Car2','Car3'];
for(var i = 0; i < allCars.length; i++)
{
(function(temp){
setTimeout(function(){
console.log(allCars[temp]);
},100)})(i);
}