作用域和閉包是基本概念,在如何在函數和代碼塊中訪問和管理變量方麵發揮著至關重要的作用。在這篇文章中,我們將了解之間的區別範圍和關閉在 JavaScript 中。
什麽是範圍?
JavaScript 中的作用域是指聲明變量或函數並可以訪問的上下文或環境。 JavaScript 使用基於函數的作用域,這意味著在函數內部聲明的變量具有本地作用域,而在任何函數外部聲明的變量具有全局作用域。
例子:在此示例中,在全局作用域中聲明了一個名為 message 的變量,並且在函數內設置和訪問其值,演示了 JavaScript 中全局作用域的概念。
Javascript
let message;
// Declare message in global scope
function GFG() {
message = "Hello, world!";
console.log(message);
}
GFG();
// Now it's accessible globally
console.log(message);
輸出:
Hello, world!
Hello, world!
什麽是閉包?
當函數 “remembers” 處於其詞法作用域時,JavaScript 中就會發生閉包,即使它是在該作用域之外執行的。換句話說,閉包允許函數從其包含函數訪問變量,甚至在包含函數完成執行之後也是如此。
例子:在此示例中,創建了一個閉包,其中內部函數保留從其包含的 “outers” 函數對 “name” 變量的訪問,從而允許它在調用時顯示個性化問候語。
Javascript
function outers() {
let name = "Kumar";
function inner() {
console.log("Hello, " + name + "!");
}
return inner;
}
let greeting = outers();
greeting();
輸出:
Hello, Kumar!
JavaScript 中作用域和閉包的區別:
特征 |
範圍 |
閉包 |
---|---|---|
定義 |
說明變量訪問的上下文。 |
指函數記住和訪問其詞法範圍的能力。 |
變量的生命周期 |
作用域中的變量具有有限的生命周期。 |
通過閉包訪問的變量可以在包含函數的生命周期之外持續存在。 |
使用權 |
範圍內的變量可以在該範圍內訪問。 |
即使在該函數退出後,閉包也允許從其包含的函數訪問變量。 |
使用案例 |
幫助防止變量命名衝突並提供對函數或塊內變量的結構化訪問。 |
對於創建私有數據、維護狀態和實現高級模式(例如柯裏化和 memory 化)很有用。 |
相關用法
- Javascript String.fromCharCode()用法及代碼示例
- Javascript String.fromCodePoint()用法及代碼示例
- Javascript Symbol.for()用法及代碼示例
- Javascript Symbol.hasInstance用法及代碼示例
- Javascript Symbol.keyFor()用法及代碼示例
- Javascript String()用法及代碼示例
- Javascript Sort()用法及代碼示例
- Javascript String includes()用法及代碼示例
- Javascript String substr()用法及代碼示例
- Javascript String trim()用法及代碼示例
- Javascript String startsWith()用法及代碼示例
- Javascript String lastIndexOf()用法及代碼示例
- Javascript String toUpperCase()用法及代碼示例
- Javascript String toLowerCase()用法及代碼示例
- Javascript String split()用法及代碼示例
- Javascript String indexOf()用法及代碼示例
- Javascript String endsWith()用法及代碼示例
- Javascript String concat()用法及代碼示例
- Javascript String charAt()用法及代碼示例
- Javascript Symbol.search用法及代碼示例
- Javascript Symbol.match用法及代碼示例
- Javascript Symbol.replace用法及代碼示例
- Javascript Symbol.split用法及代碼示例
- Javascript Set轉Array用法及代碼示例
- Javascript String轉Binary用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Difference Between Scope and Closures in JavaScript。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。