JavaScript的閉包是什么意思以及作用和應用場景


JavaScript閉包

1、什么是閉包

  百度百科對於閉包的解釋是:閉包是指可以包含自由(未綁定到特定對象)變量的代碼塊;這些變量不是在這個代碼塊內或者任何全局上下文中定義的,而是在定義代碼塊的環境中定義(局部變量)。

以代碼進行闡釋:

function a(){  //建立函數a
    var i=0;    //定義變量i
    function b(){    //在函數a內套入函數b
        alert(++i);    //提示框,輸出i的值
    }
    return b;      //返回函數b的值
}
var c = a();    //將函數a賦給變量c
c();      //輸出c

  這樣在執行完var c=a()后,變量c實際上是指向了函數b,再執行c()后就會彈出一個窗口顯示i的值(第一次為1)。這段代碼其實就創建了一個閉包,為什么?因為函數a外的變量c引用了函數a內的函數b,就是說:當函數a的內部函數b被函數a外的一個變量引用的時候,就創建了一個閉包。

2、閉包的作用

  以以上函數為例,閉包的作用就是在a執行完並返回后,閉包使得Javascript的垃圾回收機制GC(垃圾回收機制)不會收回a所占用的資源,因為a的內部函數b的執行需要依賴a中的變量,由於閉包的存在使得函數a返回后,a中的i始終存在,這樣每次執行c(),i都是自加1后alert出i的值。那么我們來想象另一種情況,如果a返回的不是函數b,情況就完全不同了。因為a執行完后,b沒有被返回給a的外界,只是被a所引用,而此時a也只會被b引 用,因此函數a和b互相引用但又不被外界打擾(被外界引用),函數a和b就會被GC回收。

3、閉包的應用場景

  1. 保護函數內的變量安全。以最開始的例子為例,函數a中i只有函數b才能訪問,而無法通過其他途徑訪問到,因此保護了i的安全性。
  2. 在內存中維持一個變量。依然如前例,由於閉包,函數a中i的一直存在於內存中,因此每次執行c(),都會給i自加1。

 

由知道借鑒,互相參考,共同學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM