浅谈setTimeout与setInterval
在吐槽这两个欺骗人的感情的方法之前先提一下这两个函数的用法:
setTimeout( function(){ alert(’你好!’); } , 100);
setInterval( callbackFunction , 100);
上述两函数第一个是指延迟100ms后执行回到函数打印“你好”
第二个函数是指每隔100ms就执行一次callbackFunction函数
但是当我们写了这样一段代码后就会发现一个很奇葩的事情:
setTimeout( function(){ while(true){} } , 100); setTimeout( function(){ alert(’你好!’); } , 200); setInterval( callbackFunction , 200);
程序阻塞在了第一句死循环里了~这和我们理解中的异步好像不太一样~~
这里~不得不得出结论:js至始至终都是单线程的~当我们定义了setTimeout和setInterval时~真实的情况是设置的时间到了后将待执行的方法异步提交到js的执行队列中等待执行~如果队列中没有其他队列在等待则被提交的方法就会被立即执行~给用户的感觉就是一个异步的执行