ES6的新增特性之 let 和 const

本文介绍了ECMAScript6.0(ES6)中的let和const关键字,它们引入了块级作用域的概念,解决了var存在的问题。let允许在同一作用域内多次声明不同值的变量,而const则是用于声明常量,一旦赋值不可更改。通过let和const,开发者可以更好地管理变量和防止意外的变量覆盖。此外,文章还探讨了const对象属性的可变性,强调了正确使用const的重要性。
摘要由CSDN通过智能技术生成

ECMAScript 6.0(也可以称为ECMAScript2015),ECMAScript 6.0简称 ES6,是 JavaScript 语言的下一代标准。ES6有很多实用的新特性, 其中最常用到的可能就是 letconst 了,下面就来聊聊这两个很实用的特性吧。

var块级作用域

在ES6之前,根据作用域的范围划分变量可分为两种:全局变量函数内的局部变量
全局变量:(在函数外声明的变量,任何地方都可以访问)

var color = "red";
// 这里可以使用 color 变量
function myFunction() {
    // 这里也可以使用 color 变量
}

局部变量:(在函数内部声明的变量,只有在函数内可以访问)

// 这里不可以使用 color 变量
function myFunction() {
     var color = "red";
    // 这里也可以使用 color 变量
}
// 这里也不可以使用 color 变量

为了更好的比较 letconstvar 的区别,还需要聊另一个概念,即块级作用域(Block Scope)。

使用 var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到。如下:

	{ 
      var color = "red"; 
    }
    // 这里可以使用 color 变量

看了上面的代码,是不是就有点疑惑了,在块级作用域内var可以被访问,在块级作用域外还是可以访问,那如果块级作用域的内外都有var声明的变量会怎样呢?

    var color = "red";
	// 这里输出 color 为 red
	{ 
	    var color = "blue";
	    // 这里输出 color 为 blue
	}
	// 这里输出 color 为 blue

由上面的例子我们可以看到,块级作用域外的变量被作用域内的变量重写了,这并不是我们想看到的结果,我们希望一些能按照规则来,就像是在函数内外声明的变量一样,变量只负责自己区域内的事情。
而如果想达到这种效果,仅靠 var 来实现是很困难的,于是就有了 letconst

let 和 const

直接上代码

   { 
      let color = 'red';
      const color2 = 'blue'
    }
   // 这里不能使用 color 变量,也不能使用 color2 变量的

上面代码很直接的展示了 letconst 的优势,即声明的变量只在块级作用域内起作用。
有了这个功能,那刚才的问题就迎刃而解了。

	var color = "red";
	// 这里输出 color 为 red
	{ 
	    let color = "blue";
	    // 这里输出 color 为 blue
	}
	// 这里输出 color 为 red

除此之外,letconst 还具备以下特征:

  • 不存在变量提升
  • 声明变量之前,该变量都是不可用的
  • 不允许重复声明

当然letconst 之间也是有区别的,其实letvar 是很相似的,可以把他 let 看作是限制了作用域的var ,而constlet 也很相似,只是它还具备一些额外的属性,例如:

  • const 声明一个只读的常量。一旦声明,常量的值就不能改变。
  • const 一旦声明变量,就必须立即初始化,

总之就是不要想着去改变 const 的值,如果是一个可能会被改动的值,那就不要用 const

当然了,准确地说,const 实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。

对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const 只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。

const obj = {
  color: 'red'
};
obj.color = 'blue';
console.log(obj.color); //这里的值是blue, 虽然obj的值改变了,但是引用地址并没有变
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值