JavaScript中有兩種主要的作用域:全局作用域和局部作用域(也稱為函數(shù)作用域)。
1. 全局作用域(Global Scope):全局作用域是指在代碼中任何地方都能訪問的作用域。在瀏覽器環(huán)境中,全局作用域通常是指在所有函數(shù)和代碼塊之外聲明的變量和函數(shù)。全局作用域中聲明的變量和函數(shù)在整個(gè)程序中都是可見和可訪問的。
var globalVariable = 'I am a global variable';
function globalFunction() {
console.log('I am a global function');
}
console.log(globalVariable); // 輸出:I am a global variable
globalFunction(); // 輸出:I am a global function
2. 局部作用域(Local Scope):局部作用域是指在函數(shù)內(nèi)部聲明的作用域。每當(dāng)創(chuàng)建一個(gè)函數(shù)時(shí),都會(huì)創(chuàng)建一個(gè)新的局部作用域。變量和函數(shù)在其所在的局部作用域內(nèi)是可見和可訪問的,但在其他函數(shù)或全局作用域中不可訪問。
function localFunction() {
var localVariable = 'I am a local variable';
console.log(localVariable);
}
localFunction(); // 輸出:I am a local variable
console.log(localVariable); // 拋出錯(cuò)誤,localVariable 在全局作用域中不可訪問
在ES6中,還引入了塊級(jí)作用域(Block Scope)的概念,通過使用`let`和`const`來聲明變量,可以在`if`語句、`for`循環(huán)等代碼塊內(nèi)創(chuàng)建局部作用域。
function blockScopeExample() {
if (true) {
let blockVariable = 'I am a block variable';
const blockConstant = 'I am a block constant';
console.log(blockVariable); // 輸出:I am a block variable
console.log(blockConstant); // 輸出:I am a block constant
}
console.log(blockVariable); // 拋出錯(cuò)誤,blockVariable 在塊級(jí)作用域之外不可訪問
console.log(blockConstant); // 拋出錯(cuò)誤,blockConstant 在塊級(jí)作用域之外不可訪問
}
blockScopeExample();
理解作用域?qū)τ诰帉懣删S護(hù)和可擴(kuò)展的JavaScript代碼至關(guān)重要,因?yàn)樗_定了變量和函數(shù)的可見性和生命周期。