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
相关推荐
太阳的后裔13 分钟前
随笔一些用C#封装的控件
开发语言·c#
tianyuanwo14 分钟前
Rust语言组件RPM包编译原理与Cargo工具详解
开发语言·网络·rust·rpm
dy17172 小时前
element-plus表格默认展开有子的数据
前端·javascript·vue.js
CodeCraft Studio5 小时前
PDF处理控件Aspose.PDF教程:使用 Python 将 PDF 转换为 Base64
开发语言·python·pdf·base64·aspose·aspose.pdf
零点零一5 小时前
VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助
开发语言·qt
2501_915918416 小时前
Web 前端可视化开发工具对比 低代码平台、可视化搭建工具、前端可视化编辑器与在线可视化开发环境的实战分析
前端·低代码·ios·小程序·uni-app·编辑器·iphone
程序员的世界你不懂6 小时前
【Flask】测试平台开发,新增说明书编写和展示功能 第二十三篇
java·前端·数据库
索迪迈科技6 小时前
网络请求库——Axios库深度解析
前端·网络·vue.js·北京百思可瑞教育·百思可瑞教育
gnip7 小时前
JavaScript二叉树相关概念
前端
lingchen19067 小时前
MATLAB的数值计算(三)曲线拟合与插值
开发语言·matlab