閉包是一個基本的 JavaScript 概念,其中內部函數可以存取其外部(封閉)函數的變數和參數,即使在外部函數完成執行之後也是如此。簡而言之,閉包允許函數「記住」並存取其外部作用域中的變量,即使該函數在不同的作用域中執行也是如此。
JavaScript 中的每個閉包都可以存取三個作用域:
讓我們透過一個基本範例來了解詞法作用域:
function init() { var name = "Mozilla"; // local variable created by init function displayName() { // inner function console.log(name); // uses variable declared in parent function } displayName(); } init();
在此範例中:
讓我們來看看示範閉包的稍加修改的版本:
function makeFunc() { const name = "Mozilla"; function displayName() { console.log(name); } return displayName; } const myFunc = makeFunc(); myFunc();
理解重點:
這裡有一個更實際的例子,展示了閉包的威力:
function makeAdder(x) { return function(y) { return x + y; }; } const add5 = makeAdder(5); const add10 = makeAdder(10); console.log(add5(2)); // outputs 7 console.log(add10(2)); // outputs 12
讓我們來分析一下發生了什麼事:
它們共享相同的函數定義
但他們有不同的詞彙環境
在add5的環境中,x是5
在add10的環境中,x是10
閉包非常強大,因為它們允許:
理解閉包對於 JavaScript 開發人員至關重要,因為它們廣泛用於現代 JavaScript 模式、框架和程式庫。它們提供了一種在函數式程式設計中建立私有變數和維護狀態的方法,同時保持程式碼整潔和可維護。
記住: 閉包不僅僅是另一個函數中的函數- 它是一個可以訪問其外部作用域中的變數的函數,並且即使在外部函數完成執行後也能保持該存取權限。
以上是了解 JavaScript 閉包:綜合指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!