技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

3分鐘了解JavaScript閉包的概念

作者:admin    時間:2022-6-7 23:41:0    瀏覽:

大多數(shù) JavaScript 教程只是深入探討 JavaScript 基礎(chǔ)知識,例如值或變量,并沒有真正深入討論閉包和作用域。盡管它們被忽視了,但作用域和閉包是 JavaScript 的基礎(chǔ)知識。

在這篇文章中,對于熟悉 JavaScript 的人和新手來說,閉包的概念都盡可能地簡潔明了,并且在 3 分鐘的閱讀時間內(nèi)就結(jié)束了。

3分鐘了解JavaScript閉包的概念

什么是閉包?

在一個不太專業(yè)的定義中,閉包只是在函數(shù)范圍內(nèi)引用另一個函數(shù)中的變量的行為。當(dāng)函數(shù)在函數(shù)內(nèi)部聲明時,內(nèi)部函數(shù)可以引用在外部函數(shù)中聲明的變量。

看看這段代碼,這里形成了一個閉包:

// 外部函數(shù)
function greet() {
   var name = "WebKaka";
    // 內(nèi)部函數(shù)
    function displayName() {
        console.log('Hi' + ' ' + name);
    }
 
    // 調(diào)用內(nèi)部函數(shù)
    displayName();
}
 
// 調(diào)用外部函數(shù)
greet();

輸出

Hi WebKaka

閉包尊重范圍。從不同函數(shù)聲明的變量完全不能在其兄弟計數(shù)器部分中引用,因為它在范圍之外。

閉包對變量的調(diào)用限制

JavaScript中的閉包帶來了變量的限制,JavaScript 想讓你編寫一個有條理的干凈代碼,這就是考慮閉包的原因。不僅僅是在任何地方分配任何變量并在任何地方調(diào)用它。這樣你可能會變得非?;靵y,甚至忘記哪個變量屬于哪個函數(shù)。

考慮下面的代碼:

// 外部函數(shù)
function greet() {
   var name = "WebKaka";
    // 內(nèi)部函數(shù)
    function displayName() {
        alert(name);
    }
    // 調(diào)用內(nèi)部函數(shù)
    displayName();
}
// 調(diào)用外部函數(shù)
greet();

// 外部函數(shù)
function greeting() {
   var myName = "卡卡網(wǎng)";
    // 內(nèi)部函數(shù)
    function displayName() {
        alert(name);
    }
    // 調(diào)用內(nèi)部函數(shù)
    displayName();
}
// 調(diào)用外部函數(shù)
greeting();

greeting 函數(shù)中的 alert 方法不會執(zhí)行其功能,因為它試圖從其范圍之外的同級函數(shù)調(diào)用“var name”。除非它從其父函數(shù)調(diào)用“var name”,否則它將無法執(zhí)行其功能。如改為下面的寫法,greeting函數(shù)中的alert方法就能執(zhí)行其功能:

// 外部函數(shù)
function greet() {
   var name = "WebKaka";
    // 內(nèi)部函數(shù)
    function displayName() {
        //alert(name);
    }
    // 調(diào)用內(nèi)部函數(shù)
    displayName();


   function greeting() {
      var myName = "卡卡網(wǎng)";
      function displayName() {
         alert(name);
      }
      displayName();
   }
   greeting();
    
}
// 調(diào)用外部函數(shù)
greet();

執(zhí)行結(jié)果

唯一不真正尊重閉包的變量是全局變量,它們通常在編程環(huán)境的頂部聲明,這種變量即使在程序中的任何地方聲明,它們也被視為在程序的開頭聲明,并且可以被環(huán)境中的任何函數(shù)調(diào)用。

閉包的概念允許你閱讀程序流,考慮變量之間的關(guān)系以及在指定范圍內(nèi)可能調(diào)用或引用的變量。

關(guān)鍵要點:

  • 閉包是 JavaScript 的支柱之一。
  • 每次聲明一個函數(shù)時,都會創(chuàng)建一個閉包。
  • 閉包是范圍限制的,因此它鼓勵塊范圍或變量限制。

總結(jié)

本文通過簡單實例,介紹了JavaScript閉包的概念,以及了解何時可以使用閉包,何時不使用閉包。

相關(guān)文章

標(biāo)簽: 閉包  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */