JavaScript 词条目录
前端Wiki/词条/作用域 Scope

作用域 Scope

定义变量与函数可被访问的范围,JS 为词法作用域(静态)+ 函数级(var)/块级(let)

作用域回答「这个变量在哪里能被看到」。JS 用词法(静态)作用域:函数能访问哪些变量由它在源代码里的位置决定,与调用位置无关。var 的作用域是「函数级」,大括号挡不住它;let/const 是「块级」——if、for 的大括号都是独立作用域。

作用域链:访问变量时沿「当前作用域 → 外层 → … → 全局」逐层查找,找不到才报 ReferenceError。闭包的本质就是函数记住了它定义时的那条作用域链。理解作用域是理解闭包、this、模块化的共同前提。

JavaScript
var g = '全局';
function outer() {
  var x = 1;
  function inner() {
    console.log(g, x);   // 沿作用域链向外找到 outer 的 x 和全局 g
  }
  inner();
}
outer();

// var 与 let 的作用域差异
function demo() {
  if (true) { var v = 1; let l = 2; }
  console.log(v);   // 1 —— var 穿透 if 块
  console.log(l);   // ReferenceError —— let 被块级作用域挡住
}
⚠ 常见误区
🔗 相关词条let const 与 var闭包事件循环
← 返回来源章节作用域