首页 > 其他 > 详细

setTimeout()和setInterval()函数

时间:2021-05-08 16:48:49      阅读:16      评论:0      收藏:0      [点我收藏+]

1. setTimeout()函数:

(1)用来指定某个函数或某段代码,在多少毫秒之后执行。它返回一个整数,表示定时器的编号,以后可以用来取消这个定时器

(2)接受两个参数,第一个参数func|code将要推迟执行的函数名或者一段代码,第二个参数delay推迟执行的毫秒数

var timerId = setTimeout(func|code, delay);
console.log(1);
setTimeout(‘console.log(2)‘,1000);
console.log(3);
//1 3 2

上面代码会先输出1和3,然后等待1000毫秒再输出2。注意,console.log(2)必须以字符串的形式,作为setTimeout参数

(3)如果推迟执行的是函数,就直接将函数名,作为setTimeout参数

1 function f() {
2   console.log(2);
3 }
4 setTimeout(f, 1000);

上面代码会等待1000毫秒再输出2

(4)setTimeout的第二个参数如果省略,则默认为0

1 setTimeout(f)
2 // 等同于
3 setTimeout(f, 0)

(5)除了前两个参数,setTimeout还允许更多的参数。它们将依次传入推迟执行的函数(回调函数)

1 setTimeout(function (a,b) {
2   console.log(a + b); 
3 }, 1000, 1, 1);

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

(6)还有一个需要注意的地方,如果回调函数是对象的方法,那么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了,而是全局环境

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

 1 var x = 1;
 2 
 3 var obj = {
 4   x: 2,
 5   y: function () {
 6     console.log(this.x);
 7   }
 8 };
 9 
10 setTimeout(function () {
11   obj.y();
12 }, 1000);   //2 

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

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

 1 var x = 1;
 2 
 3 var obj = {
 4   x: 2,
 5   y: function () {
 6     console.log(this.x);
 7   }
 8 };
 9 
10 setTimeout(obj.y.bind(obj), 1000) // 2

 

setTimeout()和setInterval()函数

原文:https://www.cnblogs.com/icyyyy/p/14744486.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!