小白速通JavaScript变量的作用域

markdown 复制代码
# JavaScript作用域详解

## 什么是作用域?

作用域就是变量和函数的"可见范围"。简单说,它决定了代码中哪些部分可以访问某个变量。

## 两种主要作用域类型

### 1. 全局作用域

在函数外部声明的变量,整个程序都可以访问

```javascript
let globalVar = "我是全局变量";

function showGlobal() {
  console.log(globalVar); // 可以访问
}

showGlobal();
console.log(globalVar); // 也可以访问

2. 局部作用域(函数作用域)

在函数内部声明的变量,只有函数内部能访问

javascript 复制代码
function localScope() {
  let localVar = "我是局部变量";
  console.log(localVar); // 可以访问
}

localScope();
console.log(localVar); // 报错!外部无法访问

块级作用域(ES6新增)

letconst 声明的变量具有块级作用域({} 就是一个块)

javascript 复制代码
if (true) {
  let blockVar = "块内变量";
  console.log(blockVar); // 可以访问
}
console.log(blockVar); // 报错!超出作用域

作用域链(重要!)

JavaScript会从当前作用域开始,逐层向外查找变量

javascript 复制代码
let outer = "外部变量";

function outerFunc() {
  let middle = "中间变量";
  
  function innerFunc() {
    let inner = "内部变量";
    console.log(inner);  // 内部变量
    console.log(middle); // 中间变量 ← 来自父作用域
    console.log(outer);  // 外部变量 ← 来自祖父作用域
  }
  
  innerFunc();
}

outerFunc();

常见误区案例

案例1:变量提升的坑

javascript 复制代码
console.log(hoistedVar); // 输出undefined而不是报错
var hoistedVar = "我被提升了";

console.log(letVar); // 报错!
let letVar = "我不会被提升";

案例2:循环中的作用域

javascript 复制代码
// 使用var(有问题)
for (var i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i); // 全部输出3!
  }, 100);
}

// 使用let(正确)
for (let j = 0; j < 3; j++) {
  setTimeout(() => {
    console.log(j); // 输出0,1,2
  }, 100);
}

总结表格

关键字 作用域类型 是否提升 是否可重复声明
var 函数作用域
let 块级作用域
const 块级作用域

记住:良好的习惯是尽量使用 letconst,避免使用 var

复制代码
相关推荐
NiceCloud喜云2 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
wordbaby2 小时前
React Native + RNOH:跨页面数据回传的最佳实践与避坑指南
前端·react native
GISer_Jing2 小时前
Three.js着色器编译机制深度解析
javascript·webgl·着色器
丷丩2 小时前
MapLibre GL JS第22课:查看本地GeoJSON
前端·javascript·map·mapbox·maplibre gl js
油炸自行车2 小时前
Claude Code 错误:API Error: 400 Failed to deserialize the JSON body into the
开发语言·javascript·json·trae·claude code·api error 400
Front思3 小时前
AI前端工程师需要具备能力+
前端·人工智能·ai
ZC跨境爬虫5 小时前
跟着 MDN 学CSS day_29:(掌握文本与字体样式的核心艺术)
前端·css·ui·html·tensorflow
李子琪。6 小时前
网络空间安全深度实战:CSRF 漏洞原理剖析与基于 Token 的纵深防御体系构建(全栈实验报告)
前端·安全·csrf
冰暮流星6 小时前
javascript之history对象介绍
前端·笔记
IT_陈寒6 小时前
Vite热更新失灵?你可能漏了这个配置
前端·人工智能·后端