推荐答案
在 JavaScript 中,全局作用域和局部作用域的主要区别在于变量的可访问性和生命周期。
全局作用域:在全局作用域中声明的变量可以在代码的任何地方访问,包括函数内部。全局变量的生命周期从声明开始,直到页面关闭或脚本结束。
局部作用域:在局部作用域(如函数内部)中声明的变量只能在该作用域内访问。局部变量的生命周期从声明开始,到函数执行结束时结束。
本题详细解读
全局作用域
全局作用域是指在整个 JavaScript 代码中都可以访问的变量。这些变量通常在脚本的最外层声明,或者在函数外部声明。全局变量的生命周期从声明开始,直到页面关闭或脚本结束。
var globalVar = "I am global";
function checkGlobalScope() {
console.log(globalVar); // 输出: I am global
}
checkGlobalScope();在这个例子中,globalVar 是一个全局变量,可以在 checkGlobalScope 函数内部访问。
局部作用域
局部作用域是指在函数内部声明的变量,这些变量只能在函数内部访问。局部变量的生命周期从声明开始,到函数执行结束时结束。
function checkLocalScope() {
var localVar = "I am local";
console.log(localVar); // 输出: I am local
}
checkLocalScope();
console.log(localVar); // 报错: localVar is not defined在这个例子中,localVar 是一个局部变量,只能在 checkLocalScope 函数内部访问。在函数外部访问 localVar 会导致错误。
块级作用域
在 ES6 中引入了 let 和 const 关键字,它们允许在块级作用域中声明变量。块级作用域是指由 {} 包围的代码块。
if (true) {
let blockVar = "I am block scoped";
console.log(blockVar); // 输出: I am block scoped
}
console.log(blockVar); // 报错: blockVar is not defined在这个例子中,blockVar 是一个块级作用域变量,只能在 if 语句的块内访问。
作用域链
JavaScript 中的作用域链决定了变量的查找顺序。当访问一个变量时,JavaScript 引擎会首先在当前作用域查找,如果找不到,则会沿着作用域链向上查找,直到全局作用域。
// www.javascriptcn.com code example
var outerVar = "I am outer";
function outerFunction() {
var innerVar = "I am inner";
function innerFunction() {
console.log(outerVar); // 输出: I am outer
console.log(innerVar); // 输出: I am inner
}
innerFunction();
}
outerFunction();在这个例子中,innerFunction 可以访问 outerVar 和 innerVar,因为它们分别在全局作用域和 outerFunction 的作用域中声明。