js閉包的理解

2022-08-22 11:39:10 字數 1134 閱讀 2050

閉包就是指有權訪問另乙個函式作用域中的變數的函式,就稱作閉包

如何建立閉包,在乙個函式中,新建另乙個函式

為什麼會形成閉包呢,這是因為函式作用域的原因導致的,乙個函式在執行時,它會生成乙個執行環境和它的活動物件(arguments和命名引數),一般情況,這個函式在執行完畢之後會被垃圾**機制給銷毀,但是如果在這個函式中,還有乙個函式並且這個函式使用了外層函式中的變數,這時,他的執行環境會被銷毀,但是,活動物件則不會銷毀,直到這個函式執行完畢,外層活動物件才會被銷毀

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

1

function

createfunctions();7}

8return

result;

9 }

這個函式返回乙個函式陣列,看上去它應該返回的都是各自的索引值,但是它所有函式返回的都是10,這是因為當函式獲取 i 時,外層函式早已執行完畢,執行作用域已經銷毀,但是i因為被內部函式使用,沒有銷毀,i的值也變成迴圈完之後的值,就是10,上面說過,內部函式呼叫的是外層函式的活動物件也就是變數,引數等,這時,i已經變成10,所以這時所有函式返回值都是10

再看下面這個例子

1

function

createfunctions();

9}(i);10}

11return

result;12}

13 createfunctions()

這個例子中對函式做出來一些改變,在內部函式外面,包了一層立即執行函式,並且把i當做引數傳了進去,因為函式引數是按值傳遞的,所以就會將當前i的值複製給引數num,在立即執行函式執行完返回函式時,這個函式返回的num值就是當前變數i的值.

以上就是筆者對js閉包的理解,如有錯誤,請指正.

JS閉包理解

下圖例項 body ul li 1 li li 2 li li 3 li ul body html script vara document.getelementsbytagname li for vari 0 i a.length i i 如何從外部讀取區域性變數 functionvisitinn...

JS閉包理解

js閉包理解 在很多面試題中都會問什麼是js的閉包,為什麼需要使用閉包,使用閉包的優缺點!我在面試其他人的時候也喜歡問這個問題,回答的也是千奇百怪,現在就總結一下我對閉包的理解。閉包是一種概念,這種概念比較複雜,很多地方的定義不盡相同,我的理解是 閉包是能讀取函式內部變數的函式,也就是定義在函式內部...

js閉包理解

什麼是閉包?這兩天我在網上翻閱了大量的閉包理解部落格,有優秀的也有生搬硬套的。歸根揭底,還是理解的問題。我曾經聽老師講閉包後,還是一臉疑惑,然後下課去網上查閱資料,仔細研究之後知道是裡面要套乙個函式返回父級變數。這次我就講解一下個人理解的閉包。為什麼會出現閉包?首先,我們先想下,我現在需要乙個一直用...