1 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
經(jīng)典問(wèn)題啊,js高程里好像也用的這個(gè)例子。
你只要這么想,一個(gè)方法定義了,你只要不執(zhí)行,方法里的代碼永遠(yuǎn)不會(huì)運(yùn)行。所以說(shuō),定義方法時(shí),根本沒(méi)人關(guān)心
return i
這個(gè)i是啥,只有執(zhí)行的時(shí)候才會(huì)去找i,這時(shí)候i已經(jīng)是10嘍。
為什么立即執(zhí)行函數(shù)可以解決這個(gè)問(wèn)題呢,原因并不是你理解的那樣。因?yàn)榱⒓磮?zhí)行的并不是a[0]函數(shù)本身,而是它的外層函數(shù)
(function(i){ a[i]=function(){ return i; } })(i)
你說(shuō)的立即執(zhí)行應(yīng)該是這種情況吧??梢钥吹絘[i]并沒(méi)有執(zhí)行,立即執(zhí)行函數(shù)在這起的作用是劃出一塊作用域。這是一個(gè)典型的閉包,因?yàn)殚]包的原因,i在立即執(zhí)行函數(shù)執(zhí)行完后不會(huì)被銷(xiāo)毀,當(dāng)a[i]執(zhí)行時(shí),會(huì)先找到閉包中的i,而不是全局的i。所以才會(huì)出現(xiàn)正確的結(jié)果。
添加回答
舉報(bào)