for(var i = 0;i<3;i++){ setTimeout(function(){ console.log(i) },1000) };
打印結果:三個3閉包
緣由分析:setTimeout()是一個異步處理函數,它會等待全部的主線程任務處理完,纔開始執行本身的內部的任務,每隔1s往任務隊列中添加一個任務【閉包函數,setTimeout()中的函數,如今還沒執行】,當主線程執行完時,這時i=3,異步
纔開始執行任務隊列中的任務【閉包函數,setTimeout()中的函數開始執行,執行三次】。函數
for循環括號內的就是主線程,執行完時i是3,因此會打印出3次3;spa
若是想打印出0,1,2線程
解決方案:code
(function(i){ setTimeout(function(){ console.log(i); },1000) })(i)