js閉包總結

學了,也看了一些關於閉包的東西,做個總結,以備不時之需,可能有不足的地方,我對閉包也不是很瞭解。

一、什麼是閉包?
閉包百度一搜,會有太多的解釋。
閉包就是嵌套在函數裏面的內部函數,並且該內部函數可以訪問外部函數聲明的所有局部變量、參數、和其它內部函數。當該內部函數在外部函數被調用時就生成了閉包。

說了一堆,舉例說明:

function wai(){
    var num=1;
    function nei(){
        alert(num);
    }
    return nei;  
}
nei()函數就是一個閉包。
var fn=wai();
fn();  //1, 相當於wai()()

二、好處
1、可以讀取函數內部的變量,
2、可以讓這些局部變量保存在內存中,實現變量數據共享。

還是以上面的代碼分析,第一個好處,nei()函數可以訪問外部函數的變量num

第二個好處:
function wai(){
    var num=1;
    function nei(){
        alert(num);
        num++;
    }
    return nei;  
}
var fn=wai();
fn();  //1
fn();  //2
fn();  //3
fn();  //4
不斷遞增,這就實現了變量數據共享。

三、缺點
1、由於閉包會使得函數中的變量都保存在內存中,一方面會使內存消耗大,另一方面在ie下導致內存泄露(不太懂,但是聽上去感覺很嚴重的樣子),結局辦法,在退出函數時,將不使用的局部變量全部刪除(null掉吧)

2、閉包會在父級外部,改變父函數內部內部變量的值(例子中的num);所以,如果你把父函數當作對象(object)使用,把閉包當做它的公用方法,把內部變量當做它的私有屬性,這時你需要做的是,加倍小心,不要隨便改變函數的值,否則你會後悔的。

四、總結
現在可能是學的也不深,對閉包真的感覺沒有用到,所以也沒有切身的體會,一直被聽說,不明覺厲

發佈了61 篇原創文章 · 獲贊 2 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章