【发布时间】:2011-06-03 20:33:48
【问题描述】:
我试图理解关于这段代码的两件事:
var updateFn = function(num){
return function(){
if(num == 6){
console.info("100%, all items saved!")
}
else{
var i = num/6;
var pct = Math.round(100 * i);
console.info(pct + "% saved");
}
};
};
for (var i = 1; i < 7; i++){
setTimeout(updateFn(i), i * 500);
}
-
根据我读到的关于 setTimeout() 语法的内容;
setTimeout("javascriptstatement",milliseconds);那么,为什么我必须增加每个循环的毫秒数,直到总时间达到 500*6 毫秒? 为什么
setTimeout(updateFn(i), 500);不能按预期工作? -
为什么我必须为作为第一个参数传递的函数返回一个函数 设置超时?
为什么这不起作用?:
var updateFn = function(num){ if(num == 6){ console.info("100%, all items saved!") } else{ var i = num/6; var pct = Math.round(100 * i); console.info(pct + "% saved"); } }; for (var i = 1; i < 7; i++){ setTimeout("updateFn(i)", i * 500); }
提前致谢。
【问题讨论】:
-
这可能是简化您的发布代码的工件,但为什么要调用 setTimeout 呢?您正在调用的函数不是异步的,并且由于 JS 是单线程的,因此您的 setTimeouts 将完成的唯一事情是在调用下一个函数时延迟,并且只有在前一个函数完成时才延迟(500 毫秒对于该调用来说已经足够了,但取决于关于你在做什么,它可能不是)
标签: javascript settimeout