JS閉包的理解

2021-09-26 03:14:06 字數 1060 閱讀 5925

一: 什麼是閉包

閉包解釋:乙個擁有許多變數和繫結了這些變數的環境的表示式

閉包特點:

函式巢狀函式

內部函式可以訪問外部函式的變數

引數和變數不會被**

變數的作用域

要理解閉包,首先必須理解js特殊的變數作用域。

變數的作用域無非就是兩種:全域性變數和區域性變數。閉包的幾大特性:

本章講述的這些特性,並非是都是閉包特有的,其他函式可能也有。

閉包函式是內部函式,因此繼承了內部函式的一些特性:

1、可以訪問父級函式的變數

上面的示例就是例子

2、閉包函式內的this指向window

3、不能直接訪問父級函式的this和arguments

閉包函式,也是乙個內部函式,內部函式不能直接訪問父級函式的this和arguments;可以通過在父級函式內將this和arguments賦值給變數,再通過訪問父級函式變數的方式訪問。

4、閉包函式使用的變數會被存入記憶體

閉包父級函式在被引用執行時,產生的上下文環境會被存入記憶體,不會隨著執行結束而被銷毀。

也就是說,上下文環境中包含的變數會被存入記憶體,不會隨呼叫結束而被銷毀,只有重新整理或關閉瀏覽器才銷毀

在函式外部自然無法讀取函式內的區域性變數

函式內部宣告變數的時候,一定要使用var命令。如果不用的話,你實際上宣告了乙個全域性變數!總結

優點可以讀取函式內部的變數

可以讓這些區域性變數儲存在記憶體中,實現變數資料共享。

缺點由於閉包會使得函式中的變數都儲存在記憶體中,一方面會使記憶體消耗大,另一方面在ie下導致記憶體洩露,解決辦法,在退出函式時,將不使用的區域性變數全部刪除(null掉吧)

閉包會在父級外部,改變父函式內部內部變數的值(例子中的num);所以,如果你把父函式當作物件(object)使用,把閉包當做它的公用方法,把內部變數當做它的私有屬性,這時你需要做的是,加倍小心,不要隨便改變函式的值。

--------------------- 閉包的意義在於:

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閉包理解

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