課程
/前端開(kāi)發(fā)
/JavaScript
/ES6快速入門(mén)
為什么是變量提升(把變量的聲明提到所在作用域的最頂端)就使得結(jié)果i*2都是等于6呢?
2019-05-09
源自:ES6快速入門(mén) 2-2
正在回答
打印結(jié)果:
當(dāng)調(diào)用callbacks[0]()時(shí),先執(zhí)行for循環(huán),直到i=3時(shí)執(zhí)行結(jié)束后,再向callbacks函數(shù)傳入i,執(zhí)行callbacks[3],循環(huán)三次。
所以這種情況 callbacks[i] ===callbacks[3]
注意:這里的index不是i,而是console.table({})中的數(shù)組下標(biāo)
Irma_C 提問(wèn)者
慕圣3317083 回復(fù) Irma_C 提問(wèn)者
Irma_C 提問(wèn)者 回復(fù) 慕圣3317083
你的理解是錯(cuò)的,這個(gè)跟閉包沒(méi)關(guān)系,閉包只是能訪問(wèn)外部函數(shù)的變量i而已。
首先要理解該問(wèn)題要明白js是從上至下執(zhí)行的;
在代碼從上至下執(zhí)行到for循環(huán)的時(shí)候執(zhí)行了3次,每次i加一,但是循環(huán)體內(nèi)只是把數(shù)組callbacks[i]賦值了一個(gè)函數(shù)(function),但是該函數(shù)并沒(méi)有執(zhí)行,此時(shí)如果出入callbacks[i]得到的都是function的字符串;所以此時(shí)并沒(méi)有執(zhí)行function里面的console.log輸出i的值。
在代碼的最后一句console.table()中寫(xiě)的是:callbacks[0](),這句代碼的意思就是執(zhí)行了callbacks[0]指向的function,這時(shí)候才會(huì)執(zhí)行function的內(nèi)容而不是返回字符串;
細(xì)雨騎驢入劍門(mén)
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures可以看下這里講的閉包定義,感覺(jué)應(yīng)該比較好理解了
因?yàn)閕是全局變量,那當(dāng)頁(yè)面加載的時(shí)候,for循環(huán)是已經(jīng)執(zhí)行完成的,此時(shí)i的值就是3,那通過(guò)循環(huán)建立的callback函數(shù)的執(zhí)行循序是在for循環(huán)之后的,所以function里面的i一直未三
舉報(bào)
用最通俗、形象的方法描述ES6的強(qiáng)大并教會(huì)你正確的學(xué)習(xí)方法。
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2019-05-10
打印結(jié)果:
當(dāng)調(diào)用callbacks[0]()時(shí),先執(zhí)行for循環(huán),直到i=3時(shí)執(zhí)行結(jié)束后,再向callbacks函數(shù)傳入i,執(zhí)行callbacks[3],循環(huán)三次。
所以這種情況 callbacks[i] ===callbacks[3]
注意:這里的index不是i,而是console.table({})中的數(shù)組下標(biāo)
2019-08-24
你的理解是錯(cuò)的,這個(gè)跟閉包沒(méi)關(guān)系,閉包只是能訪問(wèn)外部函數(shù)的變量i而已。
首先要理解該問(wèn)題要明白js是從上至下執(zhí)行的;
在代碼從上至下執(zhí)行到for循環(huán)的時(shí)候執(zhí)行了3次,每次i加一,但是循環(huán)體內(nèi)只是把數(shù)組callbacks[i]賦值了一個(gè)函數(shù)(function),但是該函數(shù)并沒(méi)有執(zhí)行,此時(shí)如果出入callbacks[i]得到的都是function的字符串;所以此時(shí)并沒(méi)有執(zhí)行function里面的console.log輸出i的值。
在代碼的最后一句console.table()中寫(xiě)的是:callbacks[0](),這句代碼的意思就是執(zhí)行了callbacks[0]指向的function,這時(shí)候才會(huì)執(zhí)行function的內(nèi)容而不是返回字符串;
2019-06-05
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures可以看下這里講的閉包定義,感覺(jué)應(yīng)該比較好理解了
2019-05-14
因?yàn)閕是全局變量,那當(dāng)頁(yè)面加載的時(shí)候,for循環(huán)是已經(jīng)執(zhí)行完成的,此時(shí)i的值就是3,那通過(guò)循環(huán)建立的callback函數(shù)的執(zhí)行循序是在for循環(huán)之后的,所以function里面的i一直未三