for (let i=1;i<=5;i++) { setTimeout(function(){console.log(i)},i*1000); }
這樣就打印1,2,3,4,5
for (var i=1;i<=5;i++) { setTimeout(function(){console.log(i)},i*1000); }
這樣就打印5個6。為什么呢?
我的理解,es6的 let 是區(qū)域作用域變量,所以每循環(huán)一次就是一個獨立的作用域,所以5個setTimeout里的i值是相互獨立的。
而es5的 var是根據(jù)函數(shù)范圍來區(qū)分作用域,循環(huán)的區(qū)域不是一個多帶帶的作用域,所以一直都是同一個i,當setTimeout開始執(zhí)行的時候,for循環(huán)已經(jīng)結束了,所以會打印5個6。
不知道我這樣理解對不對?