//每次循環(huán)會(huì)調(diào)用setTimeout函數(shù),其中指定了一個(gè)timeout后執(zhí)行的函數(shù)//這個(gè)函數(shù)因?yàn)闃?gòu)成閉包的關(guān)系,其能夠訪問外層函數(shù)定義的變量,這個(gè)變量就是i//在for循環(huán)執(zhí)行完畢后,i的值為10.此時(shí)在事件隊(duì)列中有10個(gè)timeout函數(shù)等待執(zhí)行//當(dāng)timeout時(shí)間到時(shí),對(duì)應(yīng)的執(zhí)行函數(shù)調(diào)用的i都是同一個(gè),也就是10for(vari=0;i<10;i++){setTimeout(function(){console.log(i);},1000);}//在for循環(huán)中定義了匿名立即執(zhí)行函數(shù)//通過(guò)將每次循環(huán)時(shí)產(chǎn)生i傳入匿名立即執(zhí)行函數(shù),立即執(zhí)行函數(shù)就有了一個(gè)內(nèi)部變量e,//其值是傳入的i//setTimeout函數(shù)形成閉包,能訪問到其外層函數(shù)也就是匿名立即執(zhí)行函數(shù)的變量e//因?yàn)閑引用關(guān)系的存在,匿名立即執(zhí)行函數(shù)不會(huì)被馬上銷毀掉//timeout時(shí)間一到,指定執(zhí)行函數(shù)調(diào)用的e就是每次傳入的參數(shù)ifor(vari=0;i<10;i++){(function(e){setTimeout(function(){console.log(e);},1000);})(i);}//整個(gè)和上面的類似,只不過(guò)把匿名立即執(zhí)行函數(shù)傳遞給setTimeout的第1個(gè)參數(shù)中//匿名立即執(zhí)行函數(shù),顧名思義就是需要立即執(zhí)行的呀。//所以setTimout函數(shù)對(duì)應(yīng)的超時(shí)執(zhí)行函數(shù)(第1個(gè)參數(shù))//為匿名立即執(zhí)行函數(shù)執(zhí)行的結(jié)果,也就是返回的函數(shù)。//接下來(lái)理解就和上面一樣啦for(vari=0;i<10;i++){setTimeout((function(e){returnfunction(){console.log(e);}})(i),1000)}