JS作用域,作用域链
2026/9/6 1:46:05 网站建设 项目流程

一、作用域

作用域就是变量的有效访问范围,出了地盘就找不到这个变量。 JS 有三种:全局作用域、函数作用域、块级作用域

1. 全局作用域

写在函数、大括号外面的变量,整个 JS 文件随便用。

let a = 10; // 全局变量 function fn() { console.log(a); // 可以读到全局a } fn() console.log(a); // 外面也能读到

2. 函数作用域(var 老语法)

变量写在函数内部,只能函数里面用,外面访问不到。

function fn() { var b = 20; // 函数内变量 console.log(b); } fn(); console.log(b); // ❌报错,外面看不见b

重点:var只认函数大括号,普通{ }if/for 大括号关不住 var。

if(true){ var c = 30 } console.log(c) // 可以打印30!var不受if大括号限制

3. 块级作用域 ES6let / const

只要是{ }(if、for、while、普通大括号)就形成一块地盘。let const被大括号锁住,出大括号就失效。

if(true){ let d = 40 } console.log(d) // ❌报错!出了{}找不到d

var vs let/const 核心区别

  1. var:函数作用域,会变量提升,允许重复声明
  2. let/const:块级作用域,有暂时性死区,不能重复声明
暂时性死区(TDZ)

块内,let声明之前,不能使用变量,这片区域叫死区。

console.log(x); // ❌报错,死区,不能提前用 let x = 100;

var 不会报错,会拿到 undefined

作用域链

函数找不到自己的变量,就一层一层向外层作用域找,直到全局,找不到报错。

let num = 100 function outer(){ let num = 200 function inner(){ console.log(num) // 先看自己没有 → 找outer,找到200 } inner() } outer()

查找顺序:自己局部 → 父作用域 → 祖父 → 全局。只会往外找,不会往里找

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询