Closure JavaScript中的閉包

維基百科中的解釋,閉包存儲(chǔ)了函數(shù)以及函數(shù)定義時(shí)的環(huán)境變量(自由變量)。

在談閉包的時(shí)候,有個(gè)概念需要說明一下:Scope Chain 作用域鏈。

Scope Chain

每個(gè)函數(shù)都有自己的作用域以及外部的作用域,甚至是全局的作用域。當(dāng)函數(shù)試圖訪問一個(gè)變量的時(shí)候,會(huì)現(xiàn)在這個(gè)函數(shù)的local env中查找。如果沒有,就到外部環(huán)境中查找。一層一層往外尋找,直到找到對(duì)應(yīng)的變量或者到達(dá)了global env還是沒有找到,那么這個(gè)變量就是undefined。
舉一個(gè)例子:

let txt = 'This is outsides.';
function log () {
    let txt = 'This is insides.';
    console.log(txt);
}
log();

// The output: This is insides.

輸出的結(jié)果是This is insides而不是This is insides.的原因就是,函數(shù)先從最內(nèi)層作用域開始尋找這個(gè)變量,一旦找到了就不在接著尋找了。

Use Case

  1. 緩存變量
    當(dāng)你在閉包當(dāng)中訪問了外部變量的時(shí)候,這個(gè)變量會(huì)被添加到這個(gè)閉包當(dāng)中,即Execution Context。這種辦法能使得外部的一些臨時(shí)變量不會(huì)被當(dāng)做垃圾清理了。

  2. 實(shí)現(xiàn)單例
    其實(shí)這也是緩存變量的應(yīng)用。在代碼上:

class Earth(){...}

function TheEarth(){
  let singleton = null;
  return {
      getEarth(){
        if (singleton){ return singleton; }
        createEarth();
        return singleton;
      }
      createEarth(){ singleton = new Earth(); }
  }
}

export default TheEarth();

然后,你就可以調(diào)用了:

import TheEarth from '../Earth';

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

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

  • 閉包(closure)是Javascript語言的一個(gè)難點(diǎn),也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一、變量...
    風(fēng)蕭蕭易水寒_1196閱讀 310評(píng)論 0 0
  • 閉包沒有想象的那么簡(jiǎn)單 閉包的概念在JavaScript中占據(jù)了十分重要的地位,有不少開發(fā)者分不清匿名函數(shù)和閉包的...
    老馬的春天閱讀 778評(píng)論 2 8
  • 閉包(closure)是Javascript語言的一個(gè)難點(diǎn),也是它的特色,很多高級(jí)應(yīng)用都要依靠閉包實(shí)現(xiàn)。 一、變量...
    zouCode閱讀 1,362評(píng)論 0 13
  • ● 閉包基礎(chǔ) ● 閉包作用 ● 閉包經(jīng)典例子 ● 閉包應(yīng)用 ● 閉包缺點(diǎn) ● 參考資料 1、閉包基礎(chǔ) 作用域和作...
    lzyuan閱讀 1,040評(píng)論 0 0
  • JS的閉包真的是一個(gè)老生常談的知識(shí)點(diǎn)了,無奈它并不是那么好掌握,但是它又是那么重要,很多高級(jí)應(yīng)用的開發(fā)都會(huì)用到閉包...
    一木_qintb閱讀 374評(píng)論 0 1

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