javascript - 为什么这个 Javascript 返回 undefined?

标签 javascript loops for-loop dom-events settimeout

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 个“未定义”控制台错误。

最佳答案

使用闭包:

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

关于javascript - 为什么这个 Javascript 返回 undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10615280/

相关文章:

java - 如果要在循环中创建一个对象,它会在每次迭代中不断重新创建该循环吗?

java - For 循环嵌套在另一个 for 循环中

javascript - C语言中的二叉树装箱算法

javascript - 如何确定从选择字段中选择了哪个选项

c - 迭代 argv[] 会产生段错误

objective-c - 将 NSArray 中包含的字符串分配给不同 NSArray 中包含的对象

python - 编写一个对数字列表求和的自定义求和函数

python - 避免 3d 矩阵运算的嵌套 for 循环的一般选项

javascript - 通过单击相应行上的按钮获取特定的表行值

javascript - 使用 PHP 填充 Bootstrap 输入 - 字符串变量中出现空格错误