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
相关推荐
lijun_xiao200919 分钟前
前端React18入门到实战
前端
无限进步_19 分钟前
【C语言】贪吃蛇游戏设计思路深度解析:从零开始理解每个模块
c语言·开发语言·c++·git·游戏·github·visual studio
o***Z44825 分钟前
前端响应式设计资源,框架+模板
前端
听风吟丶28 分钟前
Java 函数式编程深度实战:从 Lambda 到 Stream API 的工程化落地
开发语言·python
rainFFrain1 小时前
qt显示类控件--- Label
开发语言·qt
渡我白衣1 小时前
深入理解 OverlayFS:用分层的方式重新组织 Linux 文件系统
android·java·linux·运维·服务器·开发语言·人工智能
IT_陈寒1 小时前
Vue 3.4 正式发布:5个不可错过的性能优化与Composition API新特性
前端·人工智能·后端
西游音月1 小时前
(6)框架搭建:Qt实战项目之主窗体快捷工具条
开发语言·qt
waves浪游1 小时前
进程概念(上)
linux·运维·服务器·开发语言·c++
N***73851 小时前
前端无障碍开发资源,WCAG指南与工具
前端