知识点:(1)ES6——let定义变量(2)setTimeout延迟执行
let只能声明一次并且声明的变量只在let命令所在的代码块({}包括的区域)内有效
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式
一、setTimeout延时执行
举个栗子1:
alert(1);
setTimeout("alert(2)", 0);
alert(3);
分析:正常情况下JS都是按照顺序执行代码,但是上面的代码执行后一次弹出1、3、2,虽然只是延迟了0ms,但并不代表setTimeout函数不延时执行
实际应用:当我们想让某个语句后边的语句执行结束后再执行本语句时,即可用setTimeout延时0ms来实现
举个栗子2:
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000 * i);
}
分析:由于setTimeout会延迟执行,所以上面代码的结果是执行循环之后再将里面的函数压入事件队列,又由于 i 是var类型的,由于变量提升,最后的 i 都变成5了,于是最后都打印5(每隔1秒输出一个)
举个栗子3:
for (let i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000 * i);
}
分析:依次输出0、1、2、3、4(每隔1秒输出一个)
二、阻断setTimeout的延时执行
如果想让代码顺序执行,则可以阻断setTimeout的延时执行——应用立即执行函数
举个栗子4:
for(var i=1;i<=3;i++){
setTimeout((function(a){//改成立即执行函数
alert(a);
})(i),0);
}
分析:依次输出1、2、3(没隔1秒输出一个)
网友评论