一、什麼是閉包?
概念:乙個函式有權訪問另乙個函式作用域內的變數,這個函式就是閉包。
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...