1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. javascript閉包的定義及應(yīng)用實例分析

        時間:2023-04-01 11:50:19 JavaScript 我要投稿
        • 相關(guān)推薦

        javascript閉包的定義及應(yīng)用實例分析

          官方解釋

          “閉包”是一個擁有許多變量和綁定了這些變量的環(huán)境表達式(通常是一個函數(shù)),因而這些變量也是環(huán)境表達式的一部分。

          通俗解釋

          Javascript中所有的函數(shù)都是一個閉包。不過一般來說,嵌套的function產(chǎn)生的閉包更為強大,也是大部分時候我們所說的“閉包”。看如下代碼:

          復(fù)制代碼 代碼如下:

          這段腳本在執(zhí)行完var c=a()之后,變量c實際上就指向了函數(shù)b,b中用到了變量i,再執(zhí)行c()后就會彈出一個窗口顯示i的值。這段代碼其實就是一個閉包,為什么?因為函數(shù)a外的變量c引用了函數(shù)a內(nèi)部的函數(shù)b。

          Javascript的垃圾回收機制

          由于javascript特殊的垃圾回收機制,才導(dǎo)致了閉包的產(chǎn)生。Javascript垃圾回收機制的大體規(guī)則如下:

          在javascript中,如果一個對象不再被引用,那么這個對象就會被GC回收。如果兩個對象相互引用,而不再被第3者引用,那么這兩個互相引用的對象也會被回收。而在上述的腳本中,函數(shù)a被b引用,函數(shù)b又被函數(shù)a外的c所引用,這就是為什么函數(shù)a執(zhí)行后不被回收的原因。

          閉包的應(yīng)用場景

          1. 保護函數(shù)內(nèi)的變量安全。以上面的例子為例,函數(shù)a中變量i只有函數(shù)b才能訪問,而無法通過其他途徑訪問到,因此保護了i的安全性。

          2. 在內(nèi)存中維持一個變量。依然如上面的例子,由于閉包,函數(shù)a中的i一直存在于內(nèi)存中,因此每次執(zhí)行c(),i都會加1。

          3. 通過保護變量的安全實現(xiàn)JS私有屬性和私有方法(不能被外部訪問)。如下,私有屬性和私有方法在Constructor外是無法訪問的:

          復(fù)制代碼 代碼如下:

          function Constructor(…){

          var that = this;

          var membername = value;

          function membername(…){…}

          }

        【javascript閉包的定義及應(yīng)用實例分析】相關(guān)文章:

        JavaScript語法分析06-21

        分析JavaScript類型系統(tǒng)之Math06-25

        2017考研英語閱讀經(jīng)典實例分析08-06

        理解Javascript對象06-21

        常用的JavaScript模式08-29

        2016淘寶快速打造爆款實例分析08-25

        2017考研英語長難句解析與實例分析06-22

        詳細(xì)解說JavaScript事件06-20

        JavaScript常用方法匯總08-26

        數(shù)控機床PMC故障診斷與實例分析01-20

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>