国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦>知識(shí)大全>知識(shí)百科>百科知識(shí)>

    js閉包是什么

    時(shí)間: 歐東艷656 分享

      閉包(closure)是計(jì)算機(jī)編程領(lǐng)域的專業(yè)名詞,指可以包含自由(未綁定到特定對(duì)象)變量的代碼塊,子函數(shù)可以使用父函數(shù)中的局部變量。閉包源于要執(zhí)行的代碼塊和為自由變量提供綁定的計(jì)算環(huán)境(作用域)兩者的結(jié)合,Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Lua、objective c 以及Java(Java8及以上)等語(yǔ)言中都能找到對(duì)閉包不同程度的支持。


    js閉包

      在Javascript中閉包(Closure)

      “官方”的解釋是:所謂“閉包”,指的是一個(gè)擁有許多變量和綁定了這些變量的環(huán)境的表達(dá)式(通常是一個(gè)函數(shù)),因而這些變量也是該表達(dá)式的一部分。

      相信很少有人能直接看懂這句話,因?yàn)樗枋龅奶珜W(xué)術(shù)。我想用如何在Javascript中創(chuàng)建一個(gè)閉包來(lái)告訴你什么是閉包,因?yàn)樘^(guò)閉包的創(chuàng)建過(guò)程直接理解閉包的定義是非常困難的??聪旅孢@段

      代碼

      functiona(){

      vari=0;

      functionb(){

      alert(++i);

      }

      returnb;

      }

      varc=a();

      c();

      特點(diǎn)

      這段代碼有兩個(gè)特點(diǎn):

      1、函數(shù)b嵌套在函數(shù)a內(nèi)部;

      2、函數(shù)a返回函數(shù)b。

      這樣在執(zhí)行完var c=a( )后,變量c實(shí)際上是指向了函數(shù)b,再執(zhí)行c( )后就會(huì)彈出一個(gè)窗口顯示i的值(第一次為1)。這段代碼其實(shí)就創(chuàng)建了一個(gè)閉包,為什么?因?yàn)楹瘮?shù)a外的變量c引用了函數(shù)a內(nèi)的函數(shù)b,就是說(shuō):

      當(dāng)函數(shù)a的內(nèi)部函數(shù)b被函數(shù)a外的一個(gè)變量引用的時(shí)候,就創(chuàng)建了一個(gè)閉包。

      例子

      模擬私有變量

      function Counter(start){

      var count = start;

      return{

      increment:function(){

      count++;

      },

      get:function(){

      return count;

      }

      }

      }

      var foo =Counter(4);

      foo.increment();

      foo.get();// 5

      結(jié)果

      這里,Counter 函數(shù)返回兩個(gè)閉包,函數(shù) increment 和函數(shù) get。 這兩個(gè)函數(shù)都維持著 對(duì)外部作用域 Counter 的引用,因此總可以訪問(wèn)此作用域內(nèi)定義的變量 count.

    246703