學習閉包的一些發現1

2021-07-09 16:03:41 字數 1008 閱讀 2547

以前說過閉包就是把函式當作返回值,和把函式當作引數,這兩種清況就是閉包,那麼為什麼要把函式當作返回值呢?先看個例子:

function

f1()

console.log

(n);

結果是:

n is

not defined

但是如果寫成下面這種形式:

function

f1()

return f2;

}var result = f1();

result();

這樣就可以訪問到n了

這是因為函式有乙個作用域鏈的問題,具體可以看我寫的前面的幾篇文章,在函式內部沒有的屬性,他會一直向上查詢,在這裡在f1的內部,f2是可以訪問到f1的屬性的,所以我們就要把f2當作f1的返回值,這樣我們就可以在外面訪問到f1裡面的屬性了。

這個就是閉包:把函式定義在另乙個函式裡面

閉包就是連線函式和外面的一坐橋梁。

先看下面乙個例子,然後我們會得出閉包的乙個注意要點:

function

f1()

function

f2()

return f2;

}var result = f1();

result();

add();

result();

這裡的執行結果是99和100,為什麼呢?在第一次執行完之後,並沒有清除f1和f2的值,而是在記憶體中儲存了下來,因為result是乙個全域性變數,把f1給了他也就是f2給了他,但是f2的存在是依賴於f1的,所有他們都在記憶體當中,而add這個因為沒有用var宣告,所以它是全域性變數,指向了乙個匿名函式,所以他的執行,會影響n的值。通過以上的分析,我們可以得出:

使用閉包是比較消耗記憶體的在一般頁面使用可以,在是在比較大型的專案,有可能引起網頁的效能問題。在ie中有可能導致記憶體洩漏,解決辦法是在退出函式之前,將不使用的區域性變數全部清除。

閉包的一些

由於閉包包含之前的執行環境,所以以下的i指向同乙個i function createfunctions return result var fuk createfunctions for var i 0 i fuk.length i 10 10 10.解決方式 function createfunc...

JS中的閉包的一些理解!

在日常的開發中,基本上是不會遇到關於閉包的這樣,但是,因為在一些特殊的情況下,必須採用閉包,所以這裡簡單的概述下什麼是閉包 ok!簡而言之,閉包只是乙個名詞而已,我們更注重於他所實現的功能,也就是我們可以 在外部獲取內部的區域性變數,我們都知道,我們每定義乙個變數都會有其自己的變數作用域,全域性變數...

Js函式閉包的理解及閉包存在一些問題的解決

可以在函式外部讀取函式內部成員 讓函式內成員始終存活在記憶體中 閉包的問題 var arr for var i 0 i 10 i 應該是輸出對應下標 arr 0 11 arr 1 11 arr 2 11 這個 只是想實現根據arr下標,console.log出相應的值。但是當呼叫時,for迴圈中的i...