美文网首页
JavaScript setTimeout

JavaScript setTimeout

作者: Ace华 | 来源:发表于2018-10-26 07:02 被阅读0次
    • setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器。
    • setTimeout还允许更多的参数。它们将依次传入推迟执行的函数(回调函数)。
    setTimeout(function (a,b) {
      console.log(a + b);
    }, 1000, 1, 1);
    

    上面代码中,setTimeout共有4个参数。最后那两个参数,将在1000毫秒之后回调函数执行时,作为回调函数的参数。

    还有一个需要注意的地方,如果回调函数是对象的方法,那么setTimeout使得方法内部的this关键字指向全局环境,而不是定义时所在的那个对象。

    var x = 1;
    
    var obj = {
      x: 2,
      y: function () {
        console.log(this.x);
      }
    };
    
    setTimeout(obj.y, 1000) // 1
    

    上面代码输出的是1,而不是2。因为当obj.y在1000毫秒后运行时,this所指向的已经不是obj了,而是全局环境。

    为了防止出现这个问题,一种解决方法是将obj.y放入一个函数。

    var x = 1;
    
    var obj = {
      x: 2,
      y: function () {
        console.log(this.x);
      }
    };
    
    setTimeout(function () {
      obj.y();
    }, 1000);
    // 2
    

    上面代码中,obj.y放在一个匿名函数之中,这使得obj.y在obj的作用域执行,而不是在全局作用域内执行,所以能够显示正确的值。

    另一种解决方法是,使用bind方法,将obj.y这个方法绑定在obj上面。

    var x = 1;
    
    var obj = {
      x: 2,
      y: function () {
        console.log(this.x);
      }
    };
    
    setTimeout(obj.y.bind(obj), 1000)
    // 2
    

    相关文章

      网友评论

          本文标题:JavaScript setTimeout

          本文链接:https://www.haomeiwen.com/subject/jzghtqtx.html