成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

理解JS閉包(Closure)

galaxy_robot / 1141人閱讀

摘要:由于各種原因,我們需要在函數(shù)的外部調(diào)用函數(shù)內(nèi)部定義的局部變量。閉包的主要用處是把函數(shù)內(nèi)部的變量一直保存在內(nèi)存中可以省略該局部變量一直保存在內(nèi)存中該函數(shù)被賦予給全局變量,所以一直存在,該函數(shù)的外層函數(shù)因此也一直存在舉例

由于各種原因,我們需要在函數(shù)的外部調(diào)用函數(shù)內(nèi)部定義的局部變量。

閉包實際上就是“函數(shù)內(nèi)部的函數(shù)”,通過在函數(shù)內(nèi)部再定義一個函數(shù),內(nèi)部函數(shù)返回函數(shù)的局部變量,函數(shù)再返回內(nèi)部函數(shù)即可:

function outer() {
    var local = "local"; //局部變量
    function inner() {
        return local; //使用內(nèi)部的函數(shù)返回這個局部變量
    }
    return inner; //函數(shù)再返回內(nèi)部這個函數(shù)
}
var result = outer();
console.log(result()); //local 用兩個小括弧調(diào)用函數(shù)內(nèi)部的函數(shù)

上面的就是一個最簡單的閉包。只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,所以在函數(shù)內(nèi)部套用一個函數(shù)即可。

閉包的主要用處是把函數(shù)內(nèi)部的變量一直保存在內(nèi)存中:

var storage; //可以省略
function outer() {
    var local = "local"; //該局部變量一直保存在內(nèi)存中
    storage = function () { //該函數(shù)被賦予給全局變量storage,所以一直存在,該函數(shù)的外層函數(shù)因此也一直存在
        local += " storage;";
    };
    function inner() {
        return local;
    }
    return inner;
}
var result = outer();
console.log(result()); //local
storage();
console.log(result()); //local storage

舉例:

var obj = {
    func1: function() {
        return function () {
            return this; //window{}
        };
    },
    func2: function() {
        return this; //obj{}
    }
};
console.log(obj.func1()());
console.log(obj.func2());
var obj = {
    func1: function() {
        var that = this;
        return function () {
            return that; //obj{}
        };
    },
    func2: function() {
        return this; //obj{}
    }
};
console.log(obj.func1()());
console.log(obj.func2());

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79141.html

相關(guān)文章

  • 談?wù)勎宜?em>理解的閉包,js、php、golang里的closure

    摘要:當(dāng)初看這個解釋有點懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時網(wǎng)上很多人說閉包是難點,各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...

    betacat 評論0 收藏0
  • 談?wù)勎宜?em>理解的閉包js、php、golang里的closure

    摘要:當(dāng)初看這個解釋有點懵逼,理解成閉包就是函數(shù)中的函數(shù)了。里的閉包最近不滿足于只干前端的活,開始用起了。里的閉包最近在學(xué)習(xí)語言,讓我們來看一下語言里的閉包。在中,閉包特指將函數(shù)作為值返回的情況,被返回的函數(shù)引用了生成它的母函數(shù)中的變量。 本人開始接觸編程是從js開始的,當(dāng)時網(wǎng)上很多人說閉包是難點,各種地方對閉包的解釋也是千奇百怪。如今開始接觸js以外的各種編程語言,發(fā)現(xiàn)不光是js,php、...

    zhoutao 評論0 收藏0
  • 《你不知道的JS》讀書筆記---作用域及閉包

    摘要:注此讀書筆記只記錄本人原先不太理解的內(nèi)容經(jīng)過閱讀你不知道的后的理解。作用域及閉包基礎(chǔ),代碼運行的幕后工作者引擎及編譯器。 注:此讀書筆記只記錄本人原先不太理解的內(nèi)容經(jīng)過閱讀《你不知道的JS》后的理解。 作用域及閉包基礎(chǔ),JS代碼運行的幕后工作者:引擎及編譯器。引擎負(fù)責(zé)JS程序的編譯及執(zhí)行,編譯器負(fù)責(zé)詞法分析和代碼生成。那么作用域就像一個容器,引擎及編譯器都從這里提取東西。 ...

    denson 評論0 收藏0
  • JS 閉包(closure)

    摘要:對數(shù)組函數(shù)而言,相當(dāng)于產(chǎn)生了個閉包。關(guān)于對象在閉包中使用對象也會導(dǎo)致一些問題。不過,匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對象通常指向。由于聲明函數(shù)時與聲明函數(shù)時的值是不同的,因此閉包與閉包貌似將會表示各自不同的值。 這幾天看到閉包一章,從工具書到各路大神博客,都各自有著不同的理解,以下我將選擇性的抄(咳咳,當(dāng)然還是會附上自己理解的)一些大神們對閉包的原理及其使用文章,當(dāng)作是自己初步理解...

    nihao 評論0 收藏0
  • js-閉包

    摘要:一閉包的概念閉包官方給出的解釋閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合。解決此類情況的方式使用立即執(zhí)行函數(shù)使用中的這兩種方式的共性就是把變量變成了每個函數(shù)的局部變量,因此在執(zhí)行閉包的時候,局部變量不會發(fā)生變化。 一、閉包的概念 閉包官方給出的解釋:閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合。 下面我們舉一個經(jīng)典的且最簡單的閉包demo function closure(){ var...

    whidy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<