深入理解JavaScript閉包

2021-08-31 13:27:10 字數 1138 閱讀 5471

一、什麼是閉包

多個(兩個或兩個以上)函式巢狀,當內部函式被儲存到外部時,將會生成閉包。內部函式在外面執行的時候一定能夠呼叫的了原來它在的那個函式環境裡的變數。閉包會導致原有作用域鏈不釋放,造成記憶體洩露。

functiona(

)var aaa =

123;

return b;

}var glob =

100;

var demo =a(

);demo()

;

示例解析:

1、a 被執行時,a的作用域鏈存放了a的執行上下文,放在了作用域的最頂端

2、a被執行的時候,b被定義,然後b的作用域鏈上就會存放a的執行上下文,放在自己作用域鏈上的最頂端,再往下執行 b被return拋到全域性被demo變數儲存。

3、當a被執行之後,a的作用域上存放的a的執行上下文被銷毀,a回歸被定義狀態,等待執行。但由於之前b的作用域鏈上存放了a的執行上下文,所以b的作用域鏈上存放的a的執行上下文沒有被銷毀。

二、閉包的作用

1、實現公有變數

function

add(

)return demo;

}var counter=

add();

counter()

;//1

counter()

;//2

2、可以做快取(儲存結構)

function

eater()

else

} pushfood:

function

(myfood)

}return obj;

}var eater1 =

earer()

;eater1.

push

('banana');

eater1.

eat(

);

3、可以實現封裝,屬性私有化

4、模組化開發,防止汙染全域性變數

javascript對閉包的深入理解

最近看了一些關於閉包的內容,自己總結了一下 function getfunction return result var result1 getfunction for var j 0 j 10 j 每乙個內部函式都會儲存著屬於自己的作用域鏈,而它自己的作用域鏈包括了自己的活動物件,外部函式的活動物...

深入理解javascript原型和閉包 摘要

一切 引用型別 都是物件,物件是屬性的集合 物件都是通過函式建立的 隱式原型 instanceof的判斷隊則是 沿著a的 proto 這條線來找,同時沿著b的prototype這條線來找,如果兩條線能找到同乙個引用,即同乙個物件,那麼就返回true。如果找到終點還未重合,則返回false。insta...

深入理解閉包

閉包的定義 mdn 對閉包的定義 根據上面的例子,舉乙個例子 var str xiaoqi function getname getname 函式可以返回str這個變數,但str即不是getname函式的區域性變數,也不是foo函式的引數,所以str就是自由變數。這樣函式getname就是乙個閉包。...