定时器setTime和setInterval

setTimeout()

用法

参数:ajax

setTimeout(fn,100,1,2)。第一个和第二是参数固定的,第一个是回调函数,第二个是延迟时间,后面的都是回调函数的参数。

返回值:函数

setTimeout返回值是一个id,表示setTimeout的id,便于使用clearTimeout清除。

使用setTimeout能将里面的函数加入到任务队列中去。this

console.log(1);
setTimeout('console.log(2)',1000);
console.log(3);
上面代码执行到setTimeout时,定时线程会将里面的代码放在定时任务队列里面。而后1s后输出2。假如setTimeout('console.log(2)',1000);后面有代码报错,setTimeout也就不会执行了。

注意点

setTimeout回调函数里面的this关键字指向全局环境。线程

let x=1;
let obj={
    x:2,
    y:function(){
        console.log(this.x)
    }
}
setTimeout(obj.y(),1000)//此时输入的是1。

解决办法就是在套一层函数隔开。

let x=1;
let obj={
    x:2,
    y:function(){
        console.log(this.x)
    }
}
setTimeout(function(){obj.y()},1000)//此时输入的是2。

setInterval()

用法,参数,this指向都和setTimeout相同,不一样的只是setInterval会定时循环执行。除非关闭当前窗口。

setInterval是指一次函数执行,到下次函数执行时的时间间隔;不包括函数自己的执行时间。因此假如函数自己执行时间为105ms大于指定时间间隔100ms,那么下次函数是在105ms后执行。这样会形成时间间隔不固定(例如ajax形成的)。解决方案使用setTimeout代替。本身调用本身

var i = 1;
var timer = setTimeout(function f() {
  // ...
  timer = setTimeout(f, 2000);
}, 2000);

防抖动函数debounce

相关文章
相关标签/搜索