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
相关推荐
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
H Journey2 小时前
C++之 CMake、CMakeLists.txt、Makefile
开发语言·c++·makefile·cmake
xiaotao1316 小时前
第九章:Vite API 参考手册
前端·vite·前端打包
午安~婉6 小时前
Electron桌面应用聊天(续)
前端·javascript·electron
lly2024066 小时前
C 标准库 - `<stdio.h>`
开发语言
沫璃染墨6 小时前
C++ string 从入门到精通:构造、迭代器、容量接口全解析
c语言·开发语言·c++
jwn9996 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
迷藏4946 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
彧翎Pro7 小时前
基于 RO1 noetic 配置 robosense Helios 32(速腾) & xsense mti 300
前端·jvm
功德+n7 小时前
Linux下安装与配置Docker完整详细步骤
linux·运维·服务器·开发语言·docker·centos