日期:2014-05-16  浏览次数:20355 次

JavaScript Garden - setTimeout 和 setInterval

setTimeout?和?setInterval

由于 JavaScript 是异步的,可以使用?setTimeout?和?setInterval?来计划执行函数。

注意:?定时处理不是?ECMAScript 的标准,它们在?DOM (文档对象模型)?被实现。

function foo() {}
var id = setTimeout(foo, 1000); // 返回一个大于零的数字

当?setTimeout?被调用时,它会返回一个 ID 标识并且计划在将来大约?1000 毫秒后调用?foo?函数。
foo?函数只会被执行一次

基于 JavaScript 引擎的计时策略,以及本质上的单线程运行方式,所以其它代码的运行可能会阻塞此线程。
因此没法确保函数会在?setTimeout?指定的时刻被调用。

作为第一个参数的函数将会在全局作用域中执行,因此函数内的?this?将会指向这个全局对象。

function Foo() {
    this.value = 42;
    this.method = function() {
        // this 指向全局对象
        console.log(this.value); // 输出:undefined
    };
    setTimeout(this.method, 500);
}
new Foo();

注意:?setTimeout?的第一个参数是函数对象,一个常犯的错误是这样的?setTimeout(foo(), 1000)
这里回调函数是?foo?的返回值,而不是<