1、全局作用域
- 全局作用域是指在代码任何地方都可以访问的作用域。任何在全局作用域中声明的变量或函数都可以在脚本的任何地方访问。
- 特性
- 全局访问:在整个代码中,任何地方都可以访问和使用全局作用域中的变量和函数。
- 生命周期:在页面加载时创建,并在页面关闭时销毁。
var globalVar = 'I am a global variable';
function globalFunction() {
console.log(globalVar);
}
globalFunction(); // 输出: 'I am a global variable'
2、函数作用域
- 函数作用域是指在函数内部声明的变量或函数,它们只能在函数内部访问。函数作用域限制了变量和函数的可见范围,仅限于定义它们的函数内部。
- 特性
- 局部访问:在函数内部声明的变量只能在函数内部访问。
- 生命周期:在函数执行时创建,当函数执行完毕后销毁(如果没有被闭包引用)。
function myFunction() {
var functionVar = 'I am a function variable';
console.log(functionVar); // 输出: 'I am a function variable'
}
myFunction();
console.log(functionVar); // 抛出 ReferenceError: functionVar is not defined
3、块级作用域
- 块级作用域是指在块(通常由
{}包围的代码块)内部声明的变量或常量,只能在代码块内部访问。使用let和const关键字可以创建块级作用域。 - 特性
- 局部访问:块级作用域中的变量只能在该块内部访问。
- 生命周期:在代码块执行时创建,当代码块执行完毕后销毁。
{
let blockVar = 'I am a block variable';
const blockConst = 'I am a block constant';
console.log(blockVar); // 输出: 'I am a block variable'
console.log(blockConst); // 输出: 'I am a block constant'
}
console.log(blockVar); // 抛出 ReferenceError: blockVar is not defined
console.log(blockConst); // 抛出 ReferenceError: blockConst is not defined
4、比较与总结
-
全局作用域:
- 声明方式:任何在全局范围中声明的变量和函数(用
var,let,const等关键字)。 - 可访问范围:全局范围,任何地方都可以访问。
- 生命周期:页面加载时创建,页面关闭时销毁。
- 声明方式:任何在全局范围中声明的变量和函数(用
-
函数作用域:
- 声明方式:函数内部使用
var,let,const声明的变量。 - 可访问范围:函数内部。
- 生命周期:函数执行时创建,函数执行结束后销毁。
- 声明方式:函数内部使用
-
块级作用域:
- 声明方式:由
{}包围的代码块内部使用let,const声明的变量。 - 可访问范围:块内部。
- 生命周期:块执行时创建,块执行结束后销毁。
- 声明方式:由
5、实际应用
- 全局变量:尽量少使用全局变量,因为它们会增加代码复杂性和潜在的命名冲突风险。
- 函数作用域:适用于需要在函数内使用的临时变量。常见于传统
var关键字和临时变量。 - 块级作用域:使用
let和const提供更精准的作用域控制,避免意外的变量提升和命名冲突。