老司机三级_天天干天天操天天爽_女人被爽到娇喘呻吟视频_久久国产精品99久久久大便 - 亚洲日本系列

javascript新手學(xué)習(xí)第八課

  • • 發(fā)表于 9年前
  • • 作者 丁小柒
  • • 7595 人瀏覽
  • • 4 條評(píng)論
  • • 最后編輯時(shí)間 9年前
  • • 來(lái)自 [技 術(shù)]

原創(chuàng)聲明:本文為作者原創(chuàng),未經(jīng)允許不得轉(zhuǎn)載,經(jīng)授權(quán)轉(zhuǎn)載需注明作者和出處

何為閉包,所謂閉包就是在一個(gè)函數(shù)內(nèi)創(chuàng)建一個(gè)新函數(shù),通過(guò)這個(gè)函數(shù)來(lái)調(diào)用外面的局部變量,主要是為了設(shè)計(jì)私有的方法和變量,使用閉包會(huì)增大內(nèi)存使用量,使用不當(dāng)很容易造成內(nèi)存泄露,但是可以避免全局變量的污染


function out() {  
          var a = 1;  
          return function(a){//使用匿名函數(shù)實(shí)現(xiàn)局部變量駐留內(nèi)存中,從而實(shí)現(xiàn)累加
           return a++;
          };  
        }         
        var fun = out();  
        fun();// 1 執(zhí)行后 ++a,,然后a還在~  
        fun();// 2   
        fun = null;//a被回收

閉包的變量如果不被收回,那么會(huì)一直存在,消耗內(nèi)存
在如上的例子中,我們會(huì)發(fā)現(xiàn),一個(gè)函數(shù)套用了一個(gè)函數(shù),所以我們有時(shí)候會(huì)看到如下的調(diào)用方法 fun()();
如果以上面的代碼為例,那么

var fun=out(); 
console.log(fun);    //輸出function(){return a++; }; 說(shuō)明out()=被返回的函數(shù)
var fun=out()(); 
console.log(fun);    //輸出1,說(shuō)明out()()=最內(nèi)部被返回的值

這是因?yàn)楹瘮?shù)內(nèi)另一個(gè)函數(shù)也是作為返回的值而存在,所以我們可以直接通過(guò)這樣的方法來(lái)調(diào)用內(nèi)部返回函數(shù),那么如果是var fun=out()(2);那么返回值是什么呢,如果在全局里定義一個(gè)var a=3;
是不感覺(jué)到迷惑了,其實(shí)這里有個(gè)小技巧,當(dāng)一個(gè)變量被返回之后,會(huì)被返回給離他最近的一個(gè)相同名稱的變量. 這句話是我總結(jié)的,如果不對(duì),還請(qǐng)指出

私有成員

var out = (function(){     //使用匿名函數(shù)
        var a = 1;         //定義私有變量
        function fir(){    //私有函數(shù)
              return  a++;

        }
         function sec(){
            return a++;

        }
      return {
                a:fir,             //使用json結(jié)構(gòu)來(lái)儲(chǔ)存函數(shù)并返回
                b:sec
        }
})();
out.b();     //2
out.c()      //3
分享到:
4條評(píng)論
Ctrl+Enter
作者

丁小柒

丁小柒

APP:0 帖子:24 回復(fù):26 積分:1091

已加入社區(qū)[3228]天

長(zhǎng)劍非是封木鞘,揮手再斬萬(wàn)鬼雄

作者詳情》
Top