閉包產生的引數呼叫問題

2021-09-26 00:07:22 字數 724 閱讀 3424

關鍵知識點:

當內部函式被儲存到外部的時候會形成閉包,而內部函式的scope(作用域)會被保留,內部函式的ao(activation object)儲存著當前的執行上下文中的引數,被外部函式呼叫的時候使用的仍舊是ao中的引數。

**如下

function a()

return b;

}var test = a();

test();

test();

輸出結果為101 102

當執行第乙個test()時

直接進入b函式執行

b函式尋找引數num,b函式的ao中沒有引數num,呼叫外部函式a函式的num==100

執行num++,輸出101

執行結束,b函式被儲存到外部,執行上下文不銷毀

當執行第二個test()時:

進入b函式執行

b函式尋找num引數,找到b函式ao中保留的引數num==101

執行num++,輸出102

執行結束

寫在最後

閉包的隱患就在於我們在變成中無意中把內部函式儲存到了外部,作用域鏈機制依然有些,儲存的東西無法釋放,佔著茅坑不拉屎,即記憶體洩漏(記憶體洩漏一詞指的是記憶體占用了,剩下的記憶體就少了,即是「剩下的記憶體洩漏」)

閉包產生私有化變數,防止命名空間的汙染

下面三個函式分別和deng形成了閉包,共同用deng的閉包 preparewife這個變數能用,但是無法訪問,因為它不是物件生成的東西,是物件和原有空間生成的閉包,這就是私有化變數 function deng name,wife this changepreparewife function tar...

閉包的鏈式呼叫問題

function fun n,o var a fun 0 a.fun 1 a.fun 2 a.fun 3 undefined,var b fun 0 fun 1 fun 2 fun 3 undefined,var c fun 0 fun 1 c.fun 2 c.fun 3 undefined,問 三...

PHP閉包呼叫外部引數使用範例

話不多說,直接上 大家測試執行一下即可,主要涉及use關鍵字和 引用識別符號,大家應用一下即可 a 1 a closure1 function p1,p2 use a closure2 function p1,p2 use a closure1 11111 22222 closure2 3333 4...