javascript作用域由变量声明方式和位置共同决定:var声明具函数作用域,let/const具块级作用域,未声明赋值或最外层声明则进入全局作用域。

JavaScript 作用域(Scope)本质上是**由变量声明方式和所在位置共同决定的可见性边界**。它不靠手动“划定”,而是由语言规则自动确立——关键看两点:变量用什么关键字声明(var、let 或 const),以及它写在哪个结构里(函数体、{}块、最外层等)。
全局作用域:最外层 + 未声明直接赋值
变量出现在所有函数和块之外,或在任何函数内漏掉 var/let/const 直接赋值,就进入全局作用域。
-
var a = 1;→ 全局变量,浏览器中成为window.a -
let b = 2;或const c = 3;→ 全局变量,但不会挂到window上 -
function foo() { d = 4; }→d自动成为全局变量(不推荐!)
函数作用域:函数体内用 var 声明
只要用 var 在函数内部声明,变量就只在该函数及其嵌套函数中可访问,外部不可见。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
function test() { var x = 5; console.log(x); } test(); // 5console.log(x); // ReferenceError: x is not defined- 注意:
if、for等语句块本身不构成函数作用域,var在其中声明仍属于外层函数或全局
块级作用域:用 let/const 在 {} 内声明
ES6 起,let 和 const 支持真正的块级作用域——只要被包裹在一对花括号 {} 中(无论是否属于 if、for、switch,甚至单独的 {...}),变量就仅限该块内有效。
if (true) { let y = 6; } console.log(y); // ReferenceErrorfor (let i = 0; i-
var在同样位置声明则不受块限制,会“泄露”到外层函数或全局
作用域链:嵌套时如何找变量
当访问一个变量时,JS 引擎先查当前作用域;找不到,就顺着外层函数一层层向上找,直到全局;都找不到就报错。这个查找路径就是作用域链。
-
function outer() { const x = 'outer'; function inner() { console.log(x); } inner(); }→inner能访问x,靠的就是作用域链 - 闭包的本质,就是内部函数记住了它定义时所处的作用域链
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










