JavaScript作用域分为全局、局部和块级三种:全局作用域中变量处处可访问;局部作用域限于函数内部,每次调用新建并销毁;块级作用域由let/const在{}内声明,仅在该代码块有效。

JavaScript 的作用域,简单说就是变量和函数能被访问到的范围。它不是运行时动态决定的,而是在代码写好、函数定义完成时就固定下来的(也就是“词法作用域”)。作用域控制着名字的可见性、生命周期,也避免了不同区域用相同变量名带来的冲突。
全局作用域:处处都能用
在 标签最外层、或独立 JS 文件顶层声明的变量和函数,就属于全局作用域。它们在页面整个生命周期中都存在,任何地方都能读取(包括所有函数内部)。
-
var a = 10;写在函数外面 → 全局变量,window.a也能访问到 - 没加
var/let/const直接赋值,比如b = 20;→ 自动挂到window上,也是全局 - 页面关闭时,全局作用域才销毁
局部作用域:只在函数里有效
函数内部用 var、let 或 const 声明的变量,只在该函数体内可访问。每次调用函数,都会新建一个独立的局部作用域,执行完就销毁。
- 函数内可以读取外部(包括全局)的变量,但外部无法读取函数内的变量
- 不同函数可以有同名变量,互不影响
- 嵌套函数时,内层函数能访问外层函数的变量,形成“作用域链”
块级作用域:ES6 新增,靠 let 和 const
用 {} 包裹的代码块(如 if、for、纯大括号)本身不构成作用域,但用 let 或 const 在其中声明的变量,就只在该块内有效。
立即学习“Java免费学习笔记(深入)”;
if (true) { let x = 1; } console.log(x); // 报错-
var在块中声明仍属函数或全局作用域,不会受{}限制 - 块级作用域让变量生命周期更精准,减少意外覆盖
关键区别一句话总结
全局变量生来就“公开”,哪都能用;局部变量是“私有的”,只服务自己所在的函数;而块级变量更“谨慎”,连一个 if 块都不愿跨出去。











