摘自高程:
js是一个单线程的解释器,因此一定时间内只能执行一段代码,为了控制要执行代码,就有一个js任务队列,这些任务会按照他们添加到队列的顺序执行,延时器的第二个参数告诉了js在过多长时间把当前任务添加到队列中,如果队列是空的,则添加代码立即执行,不是空的,那就让她等前面的执行完在执行。
调用延时器该方法会返回一个数值Id, 表示超时调用这个超时调用Id是计划执行代码的唯一标识符,可以通过他来取消尚未执行的超时调用计划,可以调用cleartimeout() 方法并将相应超时调用Id作为参数传递进去。
只要在指定时间为过去之前调用cleartimeout() 就可以完全取消超时调用,但设置超时调用后马上调用cleartimeout(),结果就跟什么也没发生一样。
取消尚未执行的间歇调用,可以使用clearInterval() 方法并传入简写调用ID,取消间歇调用的重要性要远高于超时调用,因为不加干涉,间歇调用会一直执行倒也年卸载,
真正的开发环境中,后一间歇调用可能会在前一个间歇调用结束之前启动。
使用超时调用,则完全避免这一点。
----------------------------------------------------------------------------------------------------------------------------------
补充一些题:
// for(var i=0;i<4;i++){ // setTimeout(function(){ // console.log(i);//4 4 4 4 // },i*1000) // } // for(var i=0;i<4;i++){ // (function(i){ // setTimeout(function(){ // console.log(i); // },i*1000) // })(i);//0 1 2 3 // } // for(var i=0;i<4;i++){ // (function(){ // setTimeout(function(){ // console.log(i); // },i*1000) // })();//4 4 4 4 // } // for(var i=0;i<4;i++){ // (function(){ // setTimeout(function(){ // console.log(i); // },i*1000) // })(i);//4 4 4 4 // } //for(var i=0;i<4;i++){ // (function(i){ // setTimeout(function(){ // console.log(i); // },i*1000) // })();//undefined四个一起输出 // } //for(var i=0;i<4;i++){ // (function(){ // setTimeout(function(){ // console.log(i); // },500) // })();//四个4 //} //for(var i=0;i<4;i++){ // (function(i){ // setTimeout(function(){ // console.log(i); // },500) // })(i);//0 1 2 3一起输出 //}
还有个Event Loop 明天再写。
呃呃呃也是参考阮一峰大神的博客的。