談談對閉包的理解

2022-05-07 13:00:14 字數 1302 閱讀 9369

說起閉包,讓很多新手頭疼的乙個概念,甚至於有一兩年js基礎的開發人員也沒有搞懂

說到閉包,要從js的作用域說起,js的變數是函式作用域,且變數不能被函式外部訪問,但是可以被函式內部的函式訪問.這稱為js鏈式作用域

1什麼是閉包???(我的理解是,閉包就是能夠讀取其他函式內部變數的函式)

function

t1();

return

t2; };

var tnp =t1();

/*1、在大部分的語言中,t1被呼叫執行,申請記憶體,並把區域性變數push入棧,

t1函式執行完畢後,內部的區域性變數隨著函式的退出而銷毀,因此age = 20的區域性變數也就釋放了。

2、但是在js中,t1執行過程中,又生成了t2,而從作用於上來說t2可以訪

問到age = 20,於是age = 20並沒有消失,而是與返回的t1函式形成了乙個環境包,這個包屬於t2,也即是閉包。

一句話概括就是:函式的作用域取決於宣告時而不是取決於呼叫時

*/var age = 100;

tnp();

//20

2函式的作用域取決於宣告時而不是取決於呼叫時

function

closure();

return

me; };

function

place();

place();

//大桃花

3閉包的作用(防止全域性汙染,它使得函式擁有私有變數變成可能,使得讓這些變數的值始終保持在記憶體中) 

計數器受匿名函式的作用域保護,只能通過 add 方法修改

var add = (function

() })();

4用閉包來完成私有屬性

//

用閉包讓bf不能外界訪問

function

girl(name,bf);

//外界是操作不了變化的

this.movelove = function

();

};var daiyu = new girl('林黛玉','賈寶玉');

alert(daiyu.name+'喜歡'+daiyu.bf);//林黛玉喜歡undefined

daiyu.movelove();

alert(daiyu.name+'喜歡'+daiyu.showlove());//林黛玉喜歡薛寶釵

/*

這是通過閉包來完成js物件導向的私有屬性與封裝 這方法是js大牛道格拉斯提出的

*/

42 談談你對閉包的理解?

再說說閉包之前,先說一說什麼是外函式,什麼是內函式?外函式 函式a的內部定義了函式b,那麼函式a就叫做外函式 內函式 函式b就叫做內函式 什麼是閉包?在乙個外函式中定義了乙個內函式,內函式裡運用了外函式的臨時變數,並且外函式的返回值是內函式的引用。這樣就構成了乙個閉包。一般情況下,在我們認知當中,如...

對閉包的理解

閉包是什麼 答 閉包就是能夠讀取其他函式內部變數的函式。閉包函式生效的兩個條件 1 必須先定義乙個匿名函式 2 必須要執行一次匿名函式生成閉包函式 匿名函式 匿名函式 demo1 function name 呼叫匿名函式 echo demo1 張無忌 匿名函式也有自己的作用域,除了傳參,還有什麼方式...

對閉包的簡單理解

閉包是乙個特別抽象的概念,所以本文不會對概念進行解釋。直接寫例子 需要對賦值 程式的執行 返回值有一定的理解 當然本文只是個人對閉包的淺顯的理解,希望能夠對你有所幫助。function fun return funsub var fn fun 執行fun函式,並將funsub函式的位址賦值個fn。f...