理解使用setTimeout和setInterval

版权声明:转载本博客原创内容需要注明出处,谢谢 https://blog.csdn.net/u012374026/article/details/85059267

setTimeout和setInterval

要充分理解javaScript是运行于单线程环境的。
在javaScript中没有任何代码是立即执行的,但是一旦进程空闲下来就会尽快执行

setTimeout:指定的毫秒数后调用函数(引用函数)或计算表达式(js代码串)

//调用函数
function a() {
console.log(1231);
}
setTimeout(a, 1000);

// 计算表达式
function b(val) {
console.log(val);
}
setTimeout('b(1234)', 1000);

// 计算表达式
setTimeout('console.log(12312312);', 1000);

// 调用函数方式由于不能传参,可以通过闭包来实现。
function foo(a1,a2,a3){
	return function () {
		console.log(a1,a2,a3);
    }
}
var c = foo(1,2,3);
setTimeout(c,1000);

// 对比var a = function(){} ;类似
setTimeout(function(a){
    console.log(a)
},1000);

setTimeout定时器会在主线程空闲时会在指定时间后执行任务,若主线程忙碌状态,则会先把任务挂在异步队列,待主线程空闲后立即在指定时间后执行,所以实际发生前时间大于等于设定的时间

setInterval:可按照指定的周期(以毫秒计)来调用函数或计算表达式

  • 问题:定时器代码在代码再次被添加到队列之前没有执行完成,导致定时器代码执行了好几遍setInterval。
  • 缺点:1.某些间隔被跳过 2.多个定时器代码的执行间隔比预期小

解决上述两个缺点。可以采用链式setTimeout调用

setTimeout(function () {
    setTimeout(arguments.callee, interval);
}, interval);
arguments.callee对当前执行函数的引用

猜你喜欢

转载自blog.csdn.net/u012374026/article/details/85059267