JS作用域

JavaScript 主要有 4 种作用域:

1. 全局作用域(Global Scope)

在全局声明的变量,可以在整个全局环境中访问。

ini 复制代码
var a = 10;
let b = 20;

function foo() {
  console.log(a, b); // 10 20
}

注意:浏览器普通脚本中,顶层 var 通常会成为 window 的属性,而顶层 let、const 不会。

2. 函数作用域(Function Scope)

函数内部声明的变量,通常只能在函数内部访问。

ini 复制代码
function foo() {
  var a = 10;
  let b = 20;
}

console.log(a); // ReferenceError

var、let、const 都具有函数作用域。

3. 块级作用域(Block Scope)

ES6 引入 let、const 后,可以在 {} 代码块中形成独立作用域。

ini 复制代码
if (true) {
  var a = 10;
  let b = 20;
  const c = 30;
}

console.log(a); // 10
console.log(b); // ReferenceError

关键区别:var 不受普通块级作用域限制,而 let、const 受限制。

4. 模块作用域(Module Scope)

ES Module 中,顶层声明的变量默认只能在当前模块中访问。

ini 复制代码
// user.js
const name = "Tom";

export const age = 18;

其他模块只能访问显式导出的内容:

javascript 复制代码
import { age } from "./user.js";

面试需要掌握的两个相关概念

① 词法作用域(Lexical Scope)

JavaScript 采用词法作用域,也叫静态作用域。

函数能访问哪些外部变量,由函数定义的位置决定,而不是调用的位置。

scss 复制代码
let a = 10;

function foo() {
  console.log(a);
}

function bar() {
  let a = 20;
  foo();
}

bar(); // 10

② 作用域链(Scope Chain)

访问变量时,JS 会先在当前作用域查找,如果找不到,就沿外层词法作用域逐级查找。

markdown 复制代码
当前作用域
    ↓
外层函数作用域
    ↓
全局作用域

直到找到变量,或者最终抛出 ReferenceError。

相关推荐
usdoc文档预览14 分钟前
USDOC系列之PPT文件在线编辑-VUE前端实现在线浏览器在线编辑PPT文档
前端·vue.js·编辑器·office365·ppt在线编辑·office文件在线编辑·文件在线编辑
用户27050777252420 分钟前
Agent 调工具卡住?3 种超时与取消策略实测对比
前端
yeccheng30 分钟前
MySQL 索引超详解:从底层 B+ 树到面试高频考点
java·开发语言·jvm·mysql·面试
LuHang1 小时前
我一行代码没写,把领导派的活做成了公司内部系统😭
前端
明月_清风1 小时前
Meta 开源了一个 AI Native 组件库:Astryx,150+ React 组件,专为 AI Agent 而设计
前端·人工智能·ai编程
用户850869276152 小时前
秒杀系统中 Shell 脚本并发控制 Bug:究竟哪里出了
前端
炫酷的大高个4 小时前
6 亿播放的闪身步,我用前端算出 15 倍重心差
前端·javascript
不可能片场4 小时前
内容运营自动化 配图折行别把词切两半
前端·electron
Lank_M5 小时前
HEIC转JPG统一转sRGB,P3高饱和色就回不来了
前端
补码缩写5 小时前
sharp默认转JPG颜色没错,ICC和EXIF却全没了
前端