作用域与作用域链深度解析 - 详解
一、作用域(Scope)
1、基本定义
作用域是程序中变量和函数的可访问范围,它规定了在何处以及如何查找变量。JavaScript采用词法作用域(Lexical Scope),即作用域在代码编写阶段就已确定(而非运行时)。
2、作用域的类型
2-1 全局作用域(Global Scope)
- 最外层作用域
- 在浏览器中是window对象
- 在Node.js中是global对象
- 生命周期:页面关闭时销毁
var globalVar = "I'm global";
// 全局变量
function globalFunc() {
console.log("Global function");
}
// 浏览器环境中
console.log(window.globalVar);
// "I'm global"
window.globalFunc();
// "Global function"
2-2 函数作用域(Function Scope)
- 函数内部的作用域
- 使用var声明的变量具有函数作用域
- 生命周期:函数执行完毕时销毁
function myFunction() {
var functionScoped = "I'm function scoped";
if (true) {
var stillAccessible = "Still accessible";
}
console.log(stillAccessible);
// "Still accessible"
}
myFunction();
console.log(functionScoped);
// ReferenceError: functionScoped is not defined
2-3 块级作用域(Block Scope)(ES6+)
- 由 {} 包围的代码块形成的作用域
- 使用let 和 const声明的变量具有块级作用域
- 生命周期:块执行完毕时销毁
{
let blockScoped = "I'm block scoped";
const alsoBlockScoped = "Me too!";
}
console.log(blockScoped);
// ReferenceError
console.log(alsoBlockScoped);
// ReferenceError
if (true) {
let conditionVar = "Inside if block";
console.log(conditionVar);
// "Inside if block"
}
console.log(conditionVar);
// ReferenceError
for (let i = 0; i &l

浙公网安备 33010602011771号