【发布时间】:2016-08-01 13:14:12
【问题描述】:
当我在控制台中运行以下代码时:
for(var k = 0; k < 36; k++){
setTimeout(function(k){ alert(k)}, k*5000);
}
警报显示未定义。此外,我希望每次迭代后超时功能的延迟都会增加;但这不会发生。超时功能应先在 5 秒后运行,然后在 10 秒后运行,然后在 15 秒后运行,以此类推。
为什么每次迭代后都会发出 undefined 警报,为什么延迟没有增加?
由于k在timeout函数的本地范围内,所以在里面应该是可见的。
【问题讨论】:
-
k作为函数参数隐藏了k变量。 -
函数中的参数
k与循环的k无关,因为没有参数传递给(默认)setTimeout()回调,它将是undefined.至于时间安排:您只需将超时设置为从现在开始的 5 秒、10 秒、15 秒后触发,而不是一个接一个。 -
for(var k = 0; k < 36; k++){ setTimeout(function(k){ alert(k)}, k*5000,k); } -
@Rayon 提醒
k的正确值。但警报每 5 秒后弹出一次,而不是在 15、10、15、20...` 秒后弹出。 -
是的..忽略该评论.. T.J提供了详细的答案...
标签: javascript function for-loop scope settimeout