JavaScript》》JS》 Var、Let、Const 大总结

var、let、const
var 、let、const

const、let 和 var

javascript 复制代码
// 1. 作用域(Scope)
//var:函数作用域(function-scoped)在函数内部声明的变量**只能**在函数内部访问,否则是全局作用域。
function test() {
  var x = 10;
  if (true) {
    var x = 20; // 同一个变量
    console.log(x); // 20
  }
  console.log(x); // 20(if 块内覆盖了外部的 x)
}


let 和 const:块级作用域(block-scoped)在 {}(如 if、for、函数等代码块)内声明的变量只能在块内访问。
if (true) {
  let y = 10;
  const z = 20;
  console.log(y, z); // 10, 20
}
console.log(y, z); // 报错:y/z 未定义   如果是 var 修饰,就可以访问,因为var 如果在函数内,使用,则 作用域在函数内,其它全部是全局作用域


2. 变量提升(Hoisting)
var:变量会被提升到**作用域顶部(如果函数内,则提升到函数的顶部,其它也是 最顶部)**,但赋值不会。声明前访问会得到 undefined。

let 和 const:存在暂时性死区(Temporal Dead Zone, TDZ)。声明前访问会报错。

console.log(b); // 报错:Cannot access 'b' before initialization
let b = 10;

3. 重复声明
var:无论是相同还是不相同作用域,都允许重复声明,不会报错。
let 和 const:同一作用域内禁止重复声明。不同作用域可以重复声明

4. 值的修改
var 和 let:声明的变量可以重新赋值。
const:声明的是常量,赋值后不能修改(但对象/数组的属性或元素可以修改)。

5. 全局作用域下的行为
var:在全局作用域下声明的变量会成为 window 对象的属性
var h = 10;
console.log(window.h); // 10(浏览器环境)
console.log(h); // 10(浏览器环境) window可以省略
let 和 const:不会成为 window 的属性。
let i = 10;
console.log(window.i); // undefined 因为 window上没有i ,属性,js中一个不存在的属性,则输出 undefined
相关推荐
昔人'1 小时前
`list-style-type: decimal-leading-zero;`在有序列表`<ol></ol>` 中将零添加到一位数前面
前端·javascript·html
应用市场5 小时前
构建自定义命令行工具 - 打造专属指令体
开发语言·windows·python
岁月宁静6 小时前
深度定制:在 Vue 3.5 应用中集成流式 AI 写作助手的实践
前端·vue.js·人工智能
Dfreedom.6 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型
一半烟火以谋生6 小时前
Python + Pytest + Allure 自动化测试报告教程
开发语言·python·pytest
虚行6 小时前
C#上位机工程师技能清单文档
开发语言·c#
小羊在睡觉7 小时前
golang定时器
开发语言·后端·golang
心易行者7 小时前
10天!前端用coze,后端用Trae IDE+Claude Code从0开始构建到平台上线
前端
CoderCodingNo7 小时前
【GESP】C++四级真题 luogu-B4068 [GESP202412 四级] Recamán
开发语言·c++·算法
saadiya~7 小时前
ECharts 实时数据平滑更新实践(含 WebSocket 模拟)
前端·javascript·echarts