国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

我所認(rèn)識(shí)的閉包

lavnFan / 1785人閱讀

摘要:哈哈,簡(jiǎn)單粗暴的理解,不過(guò)也對(duì),這樣確實(shí)是形成了閉包。但有一個(gè)方法可以幫我們?cè)谕獠空{(diào)取內(nèi)部的值,沒(méi)錯(cuò),這就是閉包我們先繼續(xù)看這道題,我將一步步解釋。第二點(diǎn)就是利用閉包的特點(diǎn),增加某些的安全性。

(~ ̄(OO) ̄)ブ,閉包,一個(gè)面試長(zhǎng)問(wèn)的問(wèn)題,本白也迷糊了很久。慢慢不斷地有了自己的一點(diǎn)認(rèn)識(shí),這里分享一下~~~
廢話不多說(shuō),先看題:

var output = (function () {
    var x = y = 7;
    return [
        function () {
            console.log(x)
        },
        function () {
            console.log(y);
        }
    ]
})();
for (var i = 0; i < 2; i++) {
    output[i]();
}
console.log(++y);
console.log(++x);

結(jié)果是什么呢???
大家可以先自己想一下,然后來(lái)聽(tīng)我分析(xiache)(#^.^#);
首先我們從for循環(huán)開(kāi)始看起,循環(huán)了2次,分別執(zhí)行了outputp[0]();outputp[1]();
首先outputp會(huì)執(zhí)行return出一個(gè)數(shù)組,數(shù)組中有兩個(gè)方法,所以outputp[0]();outputp[1]();會(huì)執(zhí)行數(shù)組中的兩個(gè)方法。

這里就涉及到閉包的知識(shí)點(diǎn)了~~~

第一次聽(tīng)到閉包,別人給我的解釋就是,函數(shù)中輸出函數(shù)。
哈哈,簡(jiǎn)單粗暴的理解,不過(guò)也對(duì),這樣確實(shí)是形成了閉包。關(guān)于閉包,我們就要說(shuō)到j(luò)avascript的作用域,我們都知道,js中無(wú)非就是全局變量和局部變量。在js中,函數(shù)的內(nèi)部都可以訪問(wèn)的全局變量的值,但在函數(shù)外部無(wú)法獲取內(nèi)部的值。但有一個(gè)方法可以幫我們?cè)谕獠空{(diào)取內(nèi)部的值,沒(méi)錯(cuò),這就是閉包~~~
我們先繼續(xù)看這道題,我將一步步解釋。
這個(gè)是函數(shù)內(nèi)部return函數(shù),形成了閉包。所以我們?cè)谕獠靠梢垣@取到 x,y的值。沒(méi)錯(cuò)也就是我們可以用outputp[0]();outputp[1]();來(lái)獲取,也就是會(huì)打印 7 7;

為什么可以

一般的函數(shù),沒(méi)有return的時(shí)候,函數(shù)執(zhí)行完成后也就會(huì)關(guān)閉了,但閉包會(huì)return出來(lái)一個(gè)函數(shù),所以這個(gè)函數(shù)不能關(guān)閉,所以我們可以利用這個(gè)特性,這也就是我所認(rèn)為的閉包。(萌新,否求指);

繼續(xù)看

最后的兩行console.log(++y);console.log(++x); 這里我們回到 var x = y = 7;
等用于 y = 7;var x = y; 所以,y其實(shí)是個(gè)全局變量。而x是局部變量。
console.log(++y) 會(huì)輸出8 因?yàn)槿肿兞吭谀亩伎梢栽L問(wèn)到
console.log(++x) 會(huì)報(bào)錯(cuò) Uncaught ReferenceError: x is not defined
有的同學(xué)可能要問(wèn),既然閉包 也就是x的值還在內(nèi)存中,為什么訪問(wèn)不到呢,因?yàn)槲覀冎罢f(shuō)過(guò),函數(shù)外部無(wú)法獲取內(nèi)部的值,所以直接調(diào)用x是獲取不到的,閉包是利用outputp[0]()這種return出的函數(shù)調(diào)用其父的值x,y才獲取的到。

思考

閉包有什么用呢,本萌新在實(shí)戰(zhàn)中也用到過(guò)幾次,但畢竟經(jīng)驗(yàn)不足。這里就說(shuō)兩點(diǎn)吧。

for(var i = 0; i < 8;i++) {
    setTimeout(function(){
          console.log(i)
     },500) 
}

這個(gè)會(huì)輸出 8 個(gè) 8,面試題考爛了的。 如何輸出0/1/2/3/4/5/6/7呢
只要將var i 變成 let i 就可以了。 如果不用es6語(yǔ)法怎么做呢? 這樣:

for (var i = 0; i < 8; i++) { 
  (function(i){  
    setTimeout(function (){
      console.log(i); 
     },1000); 
  })(i); 
}

這個(gè)也是利用閉包的原理,函數(shù)內(nèi)部可以看父親函數(shù)的值,因?yàn)楦负瘮?shù)中有子函數(shù),所以每次for循環(huán)i的值都在內(nèi)存中,沒(méi)有變。

第二點(diǎn)就是利用閉包的特點(diǎn),增加某些key的安全性。 比如有一個(gè)很重要的信息 “樓主可真是個(gè)小機(jī)靈鬼”,在一個(gè)函數(shù)內(nèi)部,我們?cè)谕獠肯氲接盟幌肴魏稳硕伎梢噪S便調(diào)到,因?yàn)檫@個(gè)信息很重要。這樣我們就可以這樣:

function getKey(){
    var key = "樓主可真是個(gè)小機(jī)靈鬼";
    return {
         _xxx : (function(){
           return key;
        })()
    }
};
console.log(getKey()._xxx)

key我們想自己全局的調(diào)用,但不想讓同事調(diào)用。_xxx可以是一個(gè)加密的字符串,我就可以這樣寫(xiě)這樣我全局的都可以用到。
這就是本小白對(duì)閉包的理解,否佬指(不對(duì)的地方,麻煩大佬指出);
最后祝大家身體健康,謝謝~~~

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/98514.html

相關(guān)文章

  • 我所認(rèn)識(shí)閉包

    摘要:哈哈,簡(jiǎn)單粗暴的理解,不過(guò)也對(duì),這樣確實(shí)是形成了閉包。但有一個(gè)方法可以幫我們?cè)谕獠空{(diào)取內(nèi)部的值,沒(méi)錯(cuò),這就是閉包我們先繼續(xù)看這道題,我將一步步解釋。第二點(diǎn)就是利用閉包的特點(diǎn),增加某些的安全性。 (~ ̄(OO) ̄)ブ,閉包,一個(gè)面試長(zhǎng)問(wèn)的問(wèn)題,本白也迷糊了很久。慢慢不斷地有了自己的一點(diǎn)認(rèn)識(shí),這里分享一下~~~廢話不多說(shuō),先看題: var output = (function () { ...

    _Suqin 評(píng)論0 收藏0
  • 我所認(rèn)識(shí)JavaScript作用域鏈和原型鏈

    摘要:為了防止之后自己又開(kāi)始模糊,所以自己來(lái)總結(jié)一下中關(guān)于作用域鏈和原型鏈的知識(shí),并將二者相比較看待進(jìn)一步加深理解。因此我們發(fā)現(xiàn)當(dāng)多個(gè)作用域相互嵌套的時(shí)候,就形成了作用域鏈。原型鏈原型說(shuō)完了作用域鏈,我們來(lái)講講原型鏈。   畢業(yè)也整整一年了,看著很多學(xué)弟都畢業(yè)了,忽然心中頗有感慨,時(shí)間一去不復(fù)還呀。記得從去年這個(gè)時(shí)候接觸到JavaScript,從一開(kāi)始就很喜歡這門(mén)語(yǔ)言,當(dāng)時(shí)迷迷糊糊看完了《J...

    Bmob 評(píng)論0 收藏0
  • 談?wù)?em>我所理解閉包,js、php、golang里closure

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

    betacat 評(píng)論0 收藏0
  • 談?wù)?em>我所理解閉包,js、php、golang里closure

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

    zhoutao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<