我试图在javascript中设置for循环的延迟。我希望它记录i
,有延迟,然后记录i
,依此类推。我的问题是,为什么下面的代码工作,让函数返回一个函数,如下所示:
for (var i = 1; i <= 5; i++) {
var tick = function(i) {
return function() {
console.log(i);
}
};
setTimeout(tick(i), 500 * i);
}
以下代码无法正常工作:
for (var i = 1; i <= 5; i++) {
var tick = function(i) {
return console.log(i);
};
setTimeout(tick(i), 500 * i);
}
它一次打印出for循环中的所有值。有人可以解释为什么会发生这种情况吗?
答案 0 :(得分:3)
在两段代码中,tick(i)
在每个循环中立即执行
不同之处在于,在第一个示例中,tick(i)返回一个函数,该函数由setTimeout调用,并输出到控制台
在第二个示例中,立即调用console.log,返回undefined,并且一旦触发超时,setTimeout不执行任何操作,因为给定的参数不是函数(或要求的字符串)