閉包與變數

2021-09-26 21:50:20 字數 540 閱讀 8034

作用域鏈的這種配置機制引出了乙個值得注意的***,即閉包只能取得包含函式中的任何變數的最後乙個值。別忘了閉包所儲存的時整個變數物件,而不是某個特殊的變數。下面這個例子可以清晰地說明這個問題:

function createfunction () 

} return result;

}

這個函式返回的函式陣列中,所有函式的內部 i 的值都是10,但是我們可以通過建立另乙個匿名函式強制讓閉包的行為符合預期:

function createfunctions()

}(i)

} return result;

}

在這裡我們沒有直接把閉包直接賦值給陣列,兒時定義了乙個匿名函式,並將立即執行該匿名函式的結果賦值給陣列。這裡的匿名函式有乙個引數num,也就是最終的函式要返回的值。在呼叫每個匿名函式時,我們傳入了變數i。由於函式引數時按值傳遞的,所以就會將變數i的當前值複製給引數num,而在這個匿名函式中又建立並返回了乙個訪問num的閉包。這樣一來。result的值就符合預期了。

閉包與變數

js高程中關於閉包與變數這一節,講到乙個案例,我當時看的一臉懵逼,然後就自習的研究了一下,先上 function createfunctions return result 呼叫最外層函式,接收返回的陣列 var arr createfunctions 迴圈遍歷陣列,呼叫每個元素並列印 for va...

閉包與變數

作用域鏈的這種配置機制引出了乙個值得注意的 即閉包只能取得包含函式中任何變數的最後乙個值。閉包所儲存的是整個變數物件,而不是某個特殊的變數。function createfunctions return result 上述函式會返回乙個函式陣列。表面上看,似乎每個函式都應該返回自己的索引值,即位置0...

閉包與變數

作用域鏈的這種配置機制引出了乙個值得注意的 即閉包只能取得包含函式中任何變數的最後乙個值,別忘了閉包所儲存的是整個變數物件,而不是某個特殊的變數。下面的例子可以清晰的說明這個問題 function createfunctions return result 這個函式會返回乙個函式陣列,表面上看,似乎...