1.2.3.18.了解閉包(二)
Last updated
Was this helpful?
Last updated
Was this helpful?
應用閉包的實際案例
執行程式
行 1 ~ 12: 被建立, 並存放buildFunctions(),fs
行 13: 建立新的, 待函數執行完後回傳 i =3, arr = [f0, f1, f2]
行7不會被執行
buildFunctions 的執行環境離開執行堆, 但執行環境的記憶體還會在, 因此i, arr還在
行16 ~ 20被執行, 這時候因為函數中沒有i, arr的定義, 根據的觀念會開始向外尋找, 此時還是找的到i, arr, 因為i, arr位於外部的記憶體位置
如何正常印出i?
解法1:
加入行4: 因為變數j會在迴圈中, 在記憶體中建立一個新的
解法2:
: 立即執行
行 6 ~ 20會立即執行, 此時行7會回傳匿名函數 j的值會在迴圈執行時儲存
當匿名函數執行時, 會尋找j