JavaScript js閉包所用的場合以及優缺點

轉載:http://blog.sina.com.cn/s/blog_50197c290101f870.html


先上段代碼:

//函數a

function a()

{

    var i=0;
    //函數b
    function b()
    {
        alert(++i);
    }
    return b;
}
    //函數c
    var c = a();
    c();

代碼特點:
1、函數b嵌套在函數a內部;
2、函數a返回函數b。
代碼中函數a的內部函數b,被函數a外面的一個變量c引用的時候,這就叫創建了一個閉包。有時候函數b也可以用一個匿名函數代替來返回,即return function(){};
優點:1.保護函數內的變量安全,加強了封裝性 2.在內存中維持一個變量(用的太多就變成了缺點,佔內存)
閉包之所以會佔用資源是當函數a執行結束後, 變量i不會因爲函數a的結束而銷燬, 因爲b的執行需要依賴a中的變量。
不適合場景:返回閉包的函數是個非常大的函數

閉包的典型框架應該就是jquery了。
閉包是javascript語言的一大特點,主要應用閉包場合主要是爲了:設計私有的方法和變量。
這在做框架的時候體現更明顯,有些方法和屬性只是運算邏輯過程中的使用的,不想讓外部修改這些屬性,因此就可以設計一個閉包來只提供方法獲取。

閉包的缺點就是常駐內存,會增大內存使用量,使用不當很容易造成內存泄露。


1. 邏輯連續,當閉包作爲另一個函數調用的參數時,避免你脫離當前邏輯而單獨編寫額外邏輯。
2. 方便調用上下文的局部變量。
3. 加強封裝性,第2點的延伸,可以達到對變量的保護作用。

缺點:

閉包有一個非常嚴重的問題,那就是內存浪費問題,這個內存浪費不僅僅因爲它常駐內存,更重要的是,對閉包的使用不當會造成無效內存的產生
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章