0

0

javascript作用域是什么_怎样理解全局和局部作用域?

狼影

狼影

发布时间:2026-01-04 21:59:03

|

170人浏览过

|

来源于php中文网

原创

JavaScript作用域分全局、函数和块级三种:全局作用域中var声明变量可提升且可重复,let/const不提升且不可重复;函数作用域内变量仅函数内有效,支持作用域链;块级作用域仅let/const生效,var无视{}。

javascript作用域是什么_怎样理解全局和局部作用域?

JavaScript 作用域就是变量和函数能被访问的“地盘”——超出这个范围,console.log 都会报 ReferenceError: xxx is not defined

全局作用域:整个 script 或 .js 文件最外层

在任何函数外面声明的变量(用 varletconst),就属于全局作用域。它相当于挂在 window 对象上的属性(仅限浏览器环境),整个页面所有地方都能读写(除非被遮蔽)。

  • var 声明的全局变量会被提升,且可重复声明;let/const 不会提升,且不能重复声明(否则报 SyntaxError
  • 不加 var/let/const 直接赋值(如 a = 10)会隐式创建全局变量——这是严重隐患,ESLint 默认报错,务必禁用
  • 模块(.mjstype="module" 的 script)中,顶层不是全局作用域,而是模块作用域,window 上不会自动挂载
var globalA = 'I am global';
let globalB = 'also global';
function test() {
  console.log(globalA); // ✅ 可访问
  console.log(globalB); // ✅ 可访问
}
test();
console.log(globalA); // ✅
console.log(globalB); // ✅

局部作用域:函数内部(函数作用域)

只要在函数体内用 varletconst 声明的变量,就只在该函数内有效。注意:函数形参也属于局部变量,且优先级高于同名全局变量。

  • var 声明的局部变量有变量提升(hoisting),但初始化不提升;let/const 有暂时性死区(TDZ),在声明前访问会直接报 ReferenceError
  • 不同函数的局部变量完全隔离,哪怕名字一样也不会互相影响
  • 嵌套函数能访问外层函数的局部变量——这就是作用域链的基础,也是闭包的来源
var outer = 'outside';
function outerFn() {
  var inner = 'inside';
  function innerFn() {
    console.log(outer); // ✅ 访问外层函数的变量
    console.log(inner); // ✅ 访问本层函数的变量
  }
  innerFn();
}
outerFn();
console.log(inner); // ❌ ReferenceError: inner is not defined

块级作用域:{ } 内部的 let/const(不是 var)

ES6 引入的块级作用域,只对 letconst 生效,var 完全无视 { }。常见于 ifforswitch 等语句块中。

AssemblyAI
AssemblyAI

转录和理解语音的AI模型

下载

立即学习Java免费学习笔记(深入)”;

  • if (true) { let x = 1; } console.log(x); → 报错;但换成 var x = 1 就能访问到
  • 循环中用 let 声明计数器(如 for (let i = 0; ...)),每次迭代都有独立绑定,避免闭包陷阱;而 var i 全局共享一个引用
  • 块级作用域是“真正”的局部,比函数作用域更细粒度,适合临时逻辑隔离
if (true) {
  let blockScoped = 'in if';
  var functionScoped = 'also in if';
}
console.log(blockScoped);   // ❌ ReferenceError
console.log(functionScoped); // ✅ 'also in if'(var 泄露到外层函数或全局)

最容易被忽略的一点:作用域由**声明位置**决定,而非调用位置;而变量能否访问,取决于当前执行时所处的**作用域链**顶端是否包含它。写代码时别只盯着函数名,多看一眼 letvar 的声明层级——一个错位,可能让 bug 躲在控制台报错之后好几行才暴露出来。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

233

2025.12.24

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

569

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

441

2024.03.13

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

564

2023.09.20

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

97

2025.09.18

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 6.1万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号