let、const和var的区别(个人条记)

计算机软件开发 2024-10-4 18:18:40 44 0 来自 中国
1. 区别

(1)块级作用域
块作用域由{ }包括,let和const具有块级作用域,var不存在块级作用域。块级作用域办理了ES5中的两个标题:

  • 内层变量大概覆盖外层变量
  • 用来计数的循环变量走漏为全局变量(for循环中var声明变量会输出末了一个值)
(2)变量提升
  var存在变量提升,let、const 也存在变量提升,不外变量并没有初始化成 undefined,即变量只能在声明之后利用,否则会报错。
var声明会在提升时举行初始化赋值为 undefined,因此访问这些变量的时间,不会报ReferenceError非常,而利用 let,const 声明的变量,被提升后不会被初始化,这些变量所处的状态被称为“temporal dead zone(临时性死区)”,此时如果访问这些变量会抛出ReferenceError非常,看上去就像没被提升一样。
(3)给全局添加属性
 浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,而且会将该变量添加为全局对象的属性,但是let和const不会。
(4)重复声明
 var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不答应重复声明变量。
(5)临时性死区
 在利用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为临时性死区。利用var声明的变量不存在临时性死区。
(6)初始值设置
 在变量声明时,var 和 let 可以不消设置初始值。而const声明变量必须设置初始值。
(7)指针指向
 let和const都是ES6新增的用于创建变量的语法。 let创建的变量是可以更改指针指向(可以重新赋值)。但const声明的变量是不答应改变指针的指向。
2. const对象的属性可以修改吗

  const包管的并不是变量的值不能改动,而是变量指向的谁人内存所在不能改动。对于根本范例的数据(数值、字符串、布尔值),其值就生存在变量指向的谁人内存所在,因此等同于常量。
  但对于引用范例的数据(重要是对象和数组)来说,变量指向数据的内存所在,生存的只是一个指针,const只能包管这个指针是固定稳固的,至于它指向的数据布局是不是可变的,就完全不能控制了。
以下代码改变了指针,会报错
const a = {}a = {b: 1} // Uncaught TypeError: Assignment to constant variable.以下代码改变了属性的值,没有改变指针,不会报错
const a = {}a.b = 1
本文泉源:https://juejin.cn/post/6940945178899251230
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-23 17:32, Processed in 0.167367 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表