什么是閉包(closure),為什么要用它?

閉包指的是一個函數(shù)可以訪問另一個函數(shù)作用域中變量。常見的構(gòu)造方法,是在一個函數(shù)內(nèi)部定義另外一個函數(shù)。內(nèi)部函數(shù)可以引用外層的變量;外層變量不會被垃圾回收機制回收。

注意,閉包的原理是作用域鏈,所以閉包訪問的上級作用域中的變量是個對象,其值為其運算結(jié)束后的最后一個值。

優(yōu)點:避免全局變量污染。缺點:容易造成內(nèi)存泄漏(變量都被保存在內(nèi)存中)。

閉包的使用場景:封裝組件,函數(shù)引用類型,定義私有數(shù)據(jù)

特性:

a. JavaScript允許你使用在當前函數(shù)以外定義的變量

b. 即使外部函數(shù)已經(jīng)返回,當前函數(shù)仍然可以引用在外部函數(shù)所定義的變量

c. 閉包可以更新外部變量的值

d. 用閉包模擬私有方法

由于閉包會使得函數(shù)中的變量都被保存在內(nèi)存中,內(nèi)存消耗很大,所以不能濫用閉包,否則會造成網(wǎng)頁的性能問題

例子:


function makeFunc() {

    var name = "Mozilla";

    function displayName() {

        console.log(name);

    }

    return displayName;

}

var myFunc = makeFunc();

myFunc();  //輸出Mozilla
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 之前傻傻分不清 匿名函數(shù) 和 閉包 這兩個概念,因此經(jīng)常混用。閉包 是指有權(quán)訪問另一個函數(shù)作用域中的變量的函數(shù)。創(chuàng)...
    BertFu閱讀 423評論 0 1
  • 什么是閉包 閉包是指有權(quán)訪問另一個函數(shù)作用域中變量的函數(shù),創(chuàng)建閉包的最常見的方式就是在一個函數(shù)內(nèi)創(chuàng)建另一個函數(shù),通...
    開著五菱宏光的小白閱讀 800評論 0 0
  • 前言 閉包(closure)這個詞是在學(xué)習(xí)JavaScript過程中經(jīng)常被提到的,很多人一開始都對此有些迷惑,然后...
    姬艾思閱讀 9,733評論 7 6
  • 當我們談到閉包的時候,我們在談什么呢?我們會想閉包是什么?閉包會有什么副作用呢?它是用來解決什么問題的呢?帶著這些...
    雨飛飛雨閱讀 397評論 0 2
  • 閉包是什么? 閉包是一個函數(shù) 閉包可以使用在它外面定義的變量 閉包存在定義該變量的作用域中 各種專業(yè)文獻上的"閉包...
    Yixi_Li閱讀 460評論 0 6

友情鏈接更多精彩內(nèi)容