JavaScript 閉包解析

閉包的本質就是:函數A的內部函數B被A以外的函數C調用了。這樣一個閉包的函數在返回時有沒有釋放資源的棧區。 閉包

瞭解js的閉包首先要清楚變量做用域的問題函數

function demo01(){
     var index = 1;
}
demo01(); 
alert(index) //  不會彈出結果 index的做用域在demo01函數內部 
function demo02(){
     index = 2

demo02();
alert(index) 
// 會彈出2 由於在函數內部聲明變量時沒有用var,因此其實index是全局變量,全局變量與某個函數的生命週期無關。

 那麼想要從外部獲取內部的變量值該如何作呢?spa

咱們能夠在demo02中定義一個內部函數:code

function  demo02(){  

    var index02 = 3;
    function inner02(){
        alert(index02);
    }
    return inner02;
}
var getnum = demo02();//至關於獲取到了inner02
getnum();//彈出結果3對象

 inner02就是閉包。blog

// 閉包使得index03變量一直存在內存中
//
index03在函數demo03執行完畢後依然存在
function demo03(){
     var index03 = 99;  

    addone=function(){
     index03++;
    }
    function inner03(){
     alert(index03);
    }
    return inner03;
}
var getnum = demo03();
getnum();//彈出結果99
addone();//index03的值增長1  addone自己是全局變量它的值是一個匿名函數,而匿名函數自己也是閉包,能夠在函數外部對函數內部的變量進行操做。
getnum();//彈出結果100生命週期

 因此濫用閉包可能致使內存泄露,由於閉包使得變量一直在內存中不會被垃圾回收。內存

若是把demo03當作對象,index03表明屬性,inner03表明公開的方法,也要注意不要隨便修改內部的屬性值。 資源

相關文章
相關標籤/搜索