js世界這麼大,閉包想看看

2022-04-25 06:15:47 字數 1244 閱讀 6791

什麼是閉包,為什麼要用他?

閉包是能夠訪問其他函式作用域的函式。

我們來分析下句子成分(語文大神),閉包是函式,js函式的作用域分為全域性作用域,區域性作用域,eval作用域,並沒有塊級作用域形象的講,每個函式都是乙個小黑屋,能在小黑屋裡看到外面的的世界,可是外界不知道小黑屋裡是啥情況,如何開啟門從小黑屋出來呢,就用到了閉包。

有幾個概念必須要了解

作用域和作用域鏈

原來作用域和上下文作用域是兩個不同的概念,本質上來說,作用域是基於函式的,上下文是基於物件的,作用域規定了當前執行環境對變數的訪問許可權,這是js中最重要乙個概念。

作用域鏈(詞法作用域):當查詢變數的時候,會先從變數本身查起,如果本身沒有就從父級物件上查詢,一直查到全域性上下文變數物件,若無返回undefine,這個由多個執行上下文物件構成的鍊錶就叫做作用域鏈。

閉包的特點:

1、函式內再巢狀函式

2、內部函式可以引用外層的引數和變數。

3、引數和變數不會被垃圾**機制**

閉包的使用注意事項

函式會使得函式中的變數儲存在記憶體中,會占用記憶體,所以只有在必要的時候使用它,如果不用的話要將他為null

mmp show me the code

function

example();    

return

example2;   

}   

var result=example();   result(); //

1

在自己函式內部定義乙個函式,然後再將函式值return回去
function

example1()

function

example2()

return

example2;

}

var result=example1(); result(); // 1 add(); result(); // 2

解析:result();

函式定義了乙個變數 ,呼叫時直接返回乙個函式,example2裡面沒有n,沿著作用域鏈向上找到了n=1;

add();執行後n的值為2;

然後example2向上查詢時n就變成了2;

小結:整理了一下午,到處查資料,原來**越深才知道知道的越少,這些東西很重要,檢驗你是否學好可以試著給別人講懂。

由於自身能力有限,有些錯誤在所難免,歡迎指正,榮幸之至。

說說js閉包

js閉包涉及到作用域,js的作用域有兩種,全域性變數和區域性變數,全家變數就是在函式外宣告的,區域性變數是在函式內宣告的,函式內部可以直接讀取全域性變數 但是函式外部自然無法讀取函式內的區域性變數 函式內部宣告變數的時候,要用var不然就是個全域性變數 有時候需要得到函式內的區域性變數 濫用閉包會可...

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基礎 閉包

注 自由變數是既不是在本地宣告又不作為引數傳遞的一類變數。function a return b var b a b hello closure 定義乙個函式a a中定義了函式b a中返回b 執行a 把a的返回結果賦值給變數b 執行b 閉包會在父函式外部,改變父函式內部變數的值。所以,如果你把父函式...