JavaScript异步机制

195 阅读1分钟

1.关于setTimeout

作为参数传入setTimeout的函数将在指定时间执行,属于典型的异步函数

想想下面的代码将输出什么?

for(var i=0; i<5; i++){
    setTimeout(function(){console.log(i)},0)
}
var start = new Date
while(new Date - start < 1000){
    
}

答案是停顿一秒后连续输出三个5

why?

  1. 为什么是5? 原因很简单用var命名的变量将作用于函数域,作用于整个for循环过程 ,很显然循环过后i=5;
  2. 为什么会停顿一秒?说明JavaScript事件处理器会在while循环结束后才执行定时器中的函数

2.关于onclick事件

通过 onclick 绑定的回调函数将在某个时刻用户点击后执行,也属于异步函数,它的执行需要等到代码执行完毕

//html
<button  onclick="log()">点击</button>
//js
function log(){
    console.log('click')
}
var start = new Date
while (new Date - start < 5000){
    
}

在while循环结束前按钮绑定的函数将无法执行