settimeout设置的时间相关问题
setTimeout(function () {
console.log("王三");
}, 2000);
let num = 0;
for (let i = 0; i < 500000000; i++) {
num += i;
}
console.log(num);
console.log("张一");
这行代码执行下来发现,首先,打开页面两秒后控制台没有输出任何东西,因为这个for循环还没执行完,然后大概3~4秒for循环结束后,打印的顺序分别是num,张一,王三,这个很好理解,setTimeout是异步的,需要等到主线程结束后才去执行,但是以往的想法是以为等到主线程结束后,再开始计时,没想到不是这样的,代码执行到setTimeout的时候就已经执行了,计时已经开始了,所以等for循环结束后,立即打印了出来
let num = 0;
for (let i = 0; i < 500000000; i++) {
num += i;
}
console.log(num);
setTimeout(function () {
console.log("王三");
}, 2000);
console.log("张一");
换个顺序,等for循环结束后,setTimeout的时间才开始计时,num和张一在for循环结束后打印出来,而王三要再等2s,相当于5,6s的时间,
总结一下 设置的时间不等于你打开页面后等待的时间,而是要分情况,如果一个主线程上一个任务卡在那里,而 setTimeout还在下面,就要等待这个卡住的任务执行结束后才开始计时,然后等所有的主线程走完了,settimeout开始 执行,如果settimeout在卡住的任务之前,以文中的例子来看,超过2s后只要主线程一之行完,就会立刻出来