Javascript閉包問題

2021-08-21 02:18:29 字數 903 閱讀 7340

一、什麼是閉包?

概念:乙個函式有權訪問另乙個函式作用域內的變數,這個函式就是閉包。

function funa() ;

return funb;

}; var a = funa();

a(); // lyn

上述**中,funa中定義的變數,在funcb中可以直接訪問,funb就是乙個閉包。

二、為什麼要用閉包?

js中的函式類似與乙個小黑屋,它可以訪問到外界資訊,外界卻訪問不到它的內容。如上,將變數a放在funca函式中,除了funa之後,外界無法訪問到a變數,在外部再定義a變數也與funa中的a變數互無影響,這就是所謂的增強「封裝性」。

三、閉包的用途?

閉包主要有兩個用途:訪問函式內部的變數、讓函式內部的變數始終儲存在記憶體中。

如上**,funb被賦予了乙個全域性變數,這使得funb一直在記憶體中,funb依賴於funa,所以funa也會一直在記憶體中,占用資源。

四、閉包的缺陷?

(1)、由於閉包會使得函式中的變數都被儲存在記憶體中,記憶體的消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在ie中還可能會導致記憶體洩露,解決方法是,將不用的區域性變數全部刪除。

(2)、閉包會在父函式外部,改變父函式內部變數的值,所以不要隨便改變父函式內部變數的值。

注:記憶體洩露:一塊被分配的記憶體既不能使用,又不能**,直到瀏覽器程序結束。

出現原因:

a、迴圈引用:含有dom物件的迴圈引用將導致大部分瀏覽器記憶體洩漏;

b、js閉包:內部函式一直可以訪問外部方法中定義的私有變數;

c、dom洩露:當原有的dom被移除時,子結點引用沒有被移除則無法**;

javascript 閉包問題

函式的閉包 有權訪問另乙個函式作用域中的變數的函式。常見方式 在乙個函式內部建立另乙個函式。function createcomparisonfunction propertuname else 閉包只能取得包含函式中任何變數的最後乙個值。閉包所儲存的是整個變數物件,而不是某個特殊的值。functi...

javascript閉包詳解

下面先看乙個例子,在不執行的情況下推測一下返回結果.function t1 return t2 var temp t1 var age 99 temp 在學習了作用域之後也許會分析結果是99,實際上是20.下面對其一一分析 在大部分語言中,t1被呼叫執行,則申請記憶體並把其區域性變數push入棧。t...

javascript閉包使用

之前看到一段 很是不能理解,然後就查詢資料並且找網路上得大牛請教,最後弄懂了這段 然後就拿出來總結一下。先來看一段 var arrtest for var i 0 i 3 i arrtest function function function console.log arrtest 0 tostr...