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

資訊專欄INFORMATION COLUMN

我所認識的閉包

lavnFan / 1778人閱讀

摘要:哈哈,簡單粗暴的理解,不過也對,這樣確實是形成了閉包。但有一個方法可以幫我們在外部調(diào)取內(nèi)部的值,沒錯,這就是閉包我們先繼續(xù)看這道題,我將一步步解釋。第二點就是利用閉包的特點,增加某些的安全性。

(~ ̄(OO) ̄)ブ,閉包,一個面試長問的問題,本白也迷糊了很久。慢慢不斷地有了自己的一點認識,這里分享一下~~~
廢話不多說,先看題:

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é)果是什么呢???
大家可以先自己想一下,然后來聽我分析(xiache)(#^.^#);
首先我們從for循環(huán)開始看起,循環(huán)了2次,分別執(zhí)行了outputp[0]();outputp[1]();
首先outputp會執(zhí)行return出一個數(shù)組,數(shù)組中有兩個方法,所以outputp[0]();outputp[1]();會執(zhí)行數(shù)組中的兩個方法。

這里就涉及到閉包的知識點了~~~

第一次聽到閉包,別人給我的解釋就是,函數(shù)中輸出函數(shù)。
哈哈,簡單粗暴的理解,不過也對,這樣確實是形成了閉包。關(guān)于閉包,我們就要說到j(luò)avascript的作用域,我們都知道,js中無非就是全局變量和局部變量。在js中,函數(shù)的內(nèi)部都可以訪問的全局變量的值,但在函數(shù)外部無法獲取內(nèi)部的值。但有一個方法可以幫我們在外部調(diào)取內(nèi)部的值,沒錯,這就是閉包~~~
我們先繼續(xù)看這道題,我將一步步解釋。
這個是函數(shù)內(nèi)部return函數(shù),形成了閉包。所以我們在外部可以獲取到 x,y的值。沒錯也就是我們可以用outputp[0]();outputp[1]();來獲取,也就是會打印 7 7;

為什么可以

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

繼續(xù)看

最后的兩行console.log(++y);console.log(++x); 這里我們回到 var x = y = 7;
等用于 y = 7;var x = y; 所以,y其實是個全局變量。而x是局部變量。
console.log(++y) 會輸出8 因為全局變量在哪都可以訪問到
console.log(++x) 會報錯 Uncaught ReferenceError: x is not defined
有的同學可能要問,既然閉包 也就是x的值還在內(nèi)存中,為什么訪問不到呢,因為我們之前說過,函數(shù)外部無法獲取內(nèi)部的值,所以直接調(diào)用x是獲取不到的,閉包是利用outputp[0]()這種return出的函數(shù)調(diào)用其父的值x,y才獲取的到。

思考

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

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

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

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

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

第二點就是利用閉包的特點,增加某些key的安全性。 比如有一個很重要的信息 “樓主可真是個小機靈鬼”,在一個函數(shù)內(nèi)部,我們在外部想到用它,但不想任何人都可以隨便調(diào)到,因為這個信息很重要。這樣我們就可以這樣:

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

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

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

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

相關(guān)文章

  • 我所認識閉包

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

    _Suqin 評論0 收藏0
  • 我所認識JavaScript作用域鏈和原型鏈

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

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

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

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

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

    zhoutao 評論0 收藏0

發(fā)表評論

0條評論

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