JavaScript閉包

JavaScript閉包是一種保護私有變量的機制,在函數(shù)執(zhí)行時形成私有的作用域,保護里面的私有變量不受外界干擾。就是形成一個不銷毀的棧環(huán)境。

如果你要設置一個計數(shù)器,代碼如下:

var counter = 0;
 
function add() {
   return counter += 1;
}
 
add();
add();
add();
 
// 計數(shù)器現(xiàn)在為 3

但問題counter屬于全局變量,頁面上的其他腳本可以改變計數(shù)器。這樣我們把它變成局部變量。

function add(){
    var counter = 1;
    return counter += 1;
}

add();
add();
add();

這里輸出為1,并沒有累計數(shù)字。

這里需要閉包,代碼如下:

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

案例解析

這里的案例中變量 add 指定了函數(shù)自我調用的返回字值。

自我調用函數(shù)只執(zhí)行一次。設置計數(shù)器為 0。并返回函數(shù)表達式。

add變量可以作為一個函數(shù)使用。它可以訪問函數(shù)上一層作用域的計數(shù)器。

這個叫作 JavaScript 閉包。它使得函數(shù)擁有私有變量變成可能。

計數(shù)器受匿名函數(shù)的作用域保護,只能通過 add 方法修改。

注意事項

1、自調用函數(shù)外部的括號是必須的,如果沒有加上JavaScript無法解析為一個函數(shù)表達式的自調用;而是解析為一個函數(shù)的聲明和一個圓括號,并顯示語法錯誤——圓括號內沒有有效的表達式。

2、由于自調用函數(shù)是立即執(zhí)行函數(shù),其函數(shù)名稱會自動被忽略,不能使用函數(shù)名調用,所以自調用函數(shù)沒必要寫函數(shù)名。

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

相關閱讀更多精彩內容

  • 如果要了解閉包,我們需要先了解閉包的由來,閉包的產生,源于JS的詞法作用域 詞法作用域 作用域是指一個 變量能夠訪...
    羊烊羴閱讀 279評論 0 2
  • 閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合 ? 一個擁有許多變量和綁定了這些變量的環(huán)境的表達式(通常是一個函數(shù)),...
    郭豪豪閱讀 388評論 0 0
  • JavaScript 變量可以是局部變量或全局變量。 私有變量可以用到閉包。 全局變量 函數(shù)可以訪問由函數(shù)內部定義...
    qinexpire閱讀 221評論 0 1
  • JavaScript 變量可以是局部變量或全局變量。 私有變量可以用到閉包。 函數(shù)可以訪問函數(shù)內部定義的變量: 函...
    sayhelloworld閱讀 196評論 0 0
  • JavaScript 變量可以是局部變量或全局變量。私有變量可以用到閉包。 全局變量 變量聲明時如果不使用 var...
    S大偉閱讀 358評論 0 0

友情鏈接更多精彩內容