Javascript 學(xué)習(xí)(閉包)

js閉包

js中的閉包問題是由函數(shù)變量的作用域引出的,全局變量和局部變量的概念和Java感覺沒有太大的區(qū)別,但是如果要在js中實(shí)現(xiàn)Java中的私有變量效果,就引出了js閉包。

全局變量

在js中全局變量是指在function外部聲明的變量,或者在function內(nèi)部沒有通過var聲明的變量;
全局變量的生命周期是全局性的,即:在整個(gè)js文件中都可以調(diào)用。

例如:
var a = 0;//全局變量
function myfunction(){
    b = 0;//全局變量
    //這里可以訪問a;
    return a + b;
}

局部變量

在js中局部變量是指在function內(nèi)部通過var生命的變量;
局部變量的生命周期是局部性的,也就是只有在其聲明的function中才可以調(diào)用。

例如:
var a = 0;//全局變量
function myfunction(){
    var b = 0;//局部變量
    //這里可以訪問a
    return a + b;
}
//但是在myfunction()外部不能訪問b

私有化需求

現(xiàn)在好多地方都會(huì)有計(jì)數(shù)器的需求;
通常我們可以通過定義全局變量的方式來實(shí)現(xiàn);

例如:
var count = 0;
funtion add(){
    retutn ++count;
}

這樣看著是實(shí)現(xiàn)了我們想要的功能,但是這樣的話count變量是一個(gè)全局變量,所有的function都可以訪問這個(gè)變量,不安全;
但是局部變量又不能滿足我們的需求;

例如:
function add(){
    var count = 0;
    return ++count;
}

這樣每次的返回結(jié)果都是1,不是我們想要的;
在js中每個(gè)function都可以訪問他上一層聲明的變量,

例如:
function func1(){
    var a = 0;
    var b = function (){
        //這里可以訪問變量a
        return a++;
    }
    //這里調(diào)用b() 變量a會(huì)增加1;
    b();
}

這樣把上邊的方法簡單修改就可以了

例如:
var b = (function (){//function A
    var count = 0;
    return function(){//function B
        return ++count;
    }
})();
//每次調(diào)用b()count就會(huì)增加1后返回
var c = b();

這樣最后變的()意思為調(diào)用了functionA,即:b依賴的不是functionA 而是functionA的返回值function B,
在需要的地方直接調(diào)用b()就可以了
這樣count就變成了只有b()能訪問到的私有變量了,這就是js中的閉包。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容