当前位置: 首页 > news >正文

Javascript 中作用域的理解?

一、作用域的类型

1. 全局作用域(公司大门外)
  • 范围:整个 JavaScript 文件
  • 变量:像贴在公告栏上的信息,所有人可见
  • 例子
    const companyName = "阿里"; // 全局变量,任何地方都能访问
    function showCompany() {console.log(companyName); // 能访问
    }
    
2. 函数作用域(独立办公室)
  • 范围:函数内部
  • 变量:像办公室抽屉里的文件,只有内部员工能访问
  • 例子
    function departmentA() {const secret = "部门A的密码"; // 函数作用域变量console.log(secret); // 能访问
    }
    departmentA();
    console.log(secret); // 报错!外部无法访问
    
3. 块级作用域(会议室,ES6 新增)
  • 范围{} 内部(如 ifforwhile
  • 变量:用 letconst 声明,像会议纪要只能在会议室使用
  • 例子
    if (true) {const meetingNote = "重要内容"; // 块级作用域console.log(meetingNote); // 能访问
    }
    console.log(meetingNote); // 报错!外部无法访问
    

二、作用域链:权限的传递规则

1. 规则:像快递员送包裹
  • 当前作用域找不到变量时,会一层层向上级作用域查找
  • 直到全局作用域,找不到就报错
2. 代码示例
const globalVar = "全局"; // 全局作用域function outer() {const outerVar = "外层"; // outer 函数作用域function inner() {const innerVar = "内层"; // inner 函数作用域console.log(innerVar); // 自己抽屉找到 → "内层"console.log(outerVar); // 上级办公室找到 → "外层"console.log(globalVar); // 公告栏找到 → "全局"}inner();
}outer();

三、关键细节:避免踩坑

1. var 的坑(没有块级作用域)
for (var i = 0; i < 3; i++) {setTimeout(() => console.log(i), 100); // 输出 3,3,3
}
// 原因:var 声明的 i 属于全局作用域// 正确写法(用 let 块级作用域):
for (let i = 0; i < 3; i++) {setTimeout(() => console.log(i), 100); // 输出 0,1,2
}
2. 变量提升(先上车后补票)
  • var 声明的变量会提升到作用域顶部,但值为 undefined
  • letconst 不会完全提升(存在暂时性死区)
    console.log(a); // undefined(var 变量提升)
    var a = 10;console.log(b); // 报错(let 不会提升)
    let b = 20;
    

四、作用域的重要性

  1. 避免命名冲突:不同作用域的同名变量互不影响
  2. 数据保护:函数内部的变量外部无法直接修改
  3. 管理内存:作用域结束后,内部变量可被垃圾回收

总结比喻

  • 全局作用域:公司公告栏(随便看)
  • 函数作用域:部门保险箱(需权限)
  • 块级作用域:会议室白板(会后擦除)
  • 作用域链:快递员送包裹(层层向上找地址)

相关文章:

  • 【AI提示词】第一性原理
  • k8s学习笔记
  • 2025年KBS新算法 SCI1区TOP:长颖燕麦优化算法AOO,深度解析+性能实测
  • 【计算机视觉】深度解析MediaPipe:谷歌跨平台多媒体机器学习框架实战指南
  • 海外App数据隐私架构实战:构建GDPR、CCPA合规的全栈解决方案
  • 打造美观 API 文档:Spring Boot + Swagger 实战指南
  • 案例速成GO+Socket,个人笔记
  • Linux 服务管理两种方式service和systemctl
  • 《数学物理方程》——第一章 引入与基本概念
  • AGILE:开启LLM Agent强化学习的创新框架
  • 【dify—3】拉取镜像、本地访问dify
  • AimRT 从零到一:官方示例精讲 —— 六、pb_chn示例.md
  • 香港科技大学广州|可持续能源与环境学域博士招生宣讲会—四川大学专场
  • 【Fifty Project - D20】
  • 【自然语言处理与大模型】LangChain大模型应用框架入门②
  • 8分钟快速掌握Markdiwn
  • 阿里Qwen3 8款模型全面开源,免费商用,成本仅为 DeepSeek-R1 的三分之一
  • AIGC(生成式AI)技术全景图:从文本到图像的革命
  • Unity PBR基础知识
  • VS Code 的新AI Agent 模式绝了
  • 蔡澜回应“入ICU观察”称未至于病危,助理:只是老毛病
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使
  • “85后”潘欢欢已任河南中豫融资担保有限公司总经理
  • 澎湃思想周报丨数字时代的育儿;凛冬已至好莱坞
  • 网络游戏用户规模和市场销售创新高,知识产权保护面临哪些挑战?
  • 外卖价格、速度哪家强?记者实测美团、饿了么、京东三大平台