1
var linksList = [
   "http://a.com",
   "http://b.com",
   "http://c.com",
]

for (var i=0; i<linksList.length; i++) {
    setTimeout(function() {
        console.log(linksList[i]); 
    }, 3000);
}  

我将其粘贴到 Chrome 检查器中,无论出于何种原因它都会返回一个数字(它似乎是一个完全随机的数字?)......然后它等待......然后返回 3 个“未定义”控制台错误。

4

1 回答 1

5

使用闭包:

for (var i=0; i<linksList.length; i++) {
    (function(i){
       setTimeout(function() {
          console.log(linksList[i]); 
       }, 3000);
    })(i);
}

您的问题是,已经setTimeout调用了回调i = linksList.length,因此您正在输出:

 console.log(linksList[ linksList.length ]); 

3次,在linksList[ linksList.length ]哪里undefined

于 2012-05-16T09:09:08.573 回答