下一个代码每隔1秒显示一次,然后停止。
(function() {
var i = setInterval(function() {
console.log(new Date());
}, 1000);
console.log("Hi");
setTimeout(function() {
clearInterval(i);
}, 3000);
console.log("Hola");
})();
输出:
Hi
Hola
Wed Oct 24 2012 13:35:27 GMT+0200 (CEST)
Wed Oct 24 2012 13:35:28 GMT+0200 (CEST)
Wed Oct 24 2012 13:35:29 GMT+0200 (CEST)
但我不知道为什么首先显示Hi
和Hola
。另外,为什么setTimeout
被执行?不应该每1秒执行一次setInterval
而不能执行任何其他操作? (上面的代码是按照编写顺序运行的吗?)
感谢。
答案 0 :(得分:4)
评论显示执行顺序
(function() { // 0 anonymous function is called inline
var i = setInterval(function() { // 1 setInterval **schedules** the function
// parameter to be executed every second
console.log(new Date());
}, 1000);
console.log("Hi"); // 2 Display 'Hi' on console
setTimeout(function() { // 3 **Schedule** the function parameter to
// execute after three seconds
clearInterval(i);
}, 3000);
console.log("Hola"); // 4 Display 'Hola' on console
})();
// 5 Display date from setInterval function
// 6 Display date from setInterval function
// 7 Display date from setInterval function
// 8 Cancel setInterval executed from
// setTimeout function
希望这可以解决你的困惑。
答案 1 :(得分:3)
setTimeout
以及setInterval
仅注册函数(回调),但直接转到下一个命令。
因此,在调用第一个回调之前会打印Hi
和Hola
。
第一次回调将是{1}在1秒后的回复,然后在2秒之后再回复.3秒后setInterval
开始并清除setTimeout
。
答案 2 :(得分:2)
无论如何,setTimeout()
和setInterval()
都会被执行。
它不是sleep()
PHP的方法......很遗憾!
但是,此链接可能很有用:http://www.phpied.com/sleep-in-javascript/
答案 3 :(得分:2)
http://ejohn.org/blog/how-javascript-timers-work/
这两个事件是异步的。它们在下一个可用时刻排队/执行,而不是在调用“setTimeout”或“setInterval”的确切时间。