JavaScript变量可见性由作用域决定:全局作用域中顶层声明的变量处处可读,局部作用域(函数或块级)内声明的变量仅限内部使用;变量查找遵循就近原则与作用域链。

JavaScript 中变量的可见性由作用域决定,核心是“在哪声明、在哪能用”。全局作用域和局部作用域的划分,直接决定了变量能不能被其他代码访问。
全局作用域:脚本顶层声明,处处可读
在最外层(即函数外部、模块顶层)用 var/let/const 声明的变量,属于全局作用域。它们在整个脚本生命周期内都存在,任何地方都能读取(包括所有函数内部)。
- 浏览器中,这些变量会自动成为 window 对象的属性(如
let a = 1→window.a === 1) - 未加声明直接赋值(如
b = 2)也会创建全局变量,但属于隐式声明,容易引发污染,应避免 - 注意:ES6 模块(
import/export)有独立的顶级作用域,模块内顶层声明的变量不会挂到window上
局部作用域:函数或代码块内声明,仅限内部使用
局部作用域分两类,可见性严格受限于声明位置:
-
函数作用域:在函数体内用
var/let/const声明的变量,只在该函数内部(含嵌套函数)可见;函数执行结束,变量通常被回收 -
块级作用域(ES6+):用
let/const在{}内声明(如if、for、while),变量仅在该代码块内有效;var不具备块级作用域,仍按函数作用域处理
变量查找规则:就近原则 + 作用域链
当代码访问一个变量时,JS 引擎不会直接跳到全局去找,而是按以下顺序逐层向上查找:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 先看当前作用域(如函数体或
{}块)有没有该变量声明 - 没有就查上一级(如外层函数)
- 一直查到全局作用域为止;如果全程没找到,就报
ReferenceError
例如:function f() { let x = 1; console.log(x); } 中的 x 在函数外无法访问;而 let y = 2; function g() { console.log(y); } 中的 y 在 g 内可以访问,因为全局作用域是它的上层。
常见混淆点提醒
有些写法看似简单,却容易误判可见性:
for (let i = 0; i → 报错,<code>i是块级变量,console.log在块外for (var j = 0; j → 输出 <code>3,var没有块级作用域,j属于函数或全局作用域- 函数参数也是局部变量,只在函数内有效,且优先级高于同名全局变量

















