目录

let和const的区别

let和const的区别是:let 是块级作用域,块是由 {} 界定的代码块,大括号中有一个块,大括号内的任何内容都包含在一个块级作用域中;用const声明的变量保持常量值,const 不能被修改并且不能被重新声明。

一、let和const的区别

Let

let现在已经成为变量声明的优选。这并不奇怪,因为它是对var声明的改进。它也解决了我们刚刚介绍的var问题。让我们考虑一下为什么会这样。

let 是块级作用域,块是由 {} 界定的代码块,大括号中有一个块。大括号内的任何内容都包含在一个块级作用域中。

因此,在带有let的块中声明的变量仅可在该块中使用。

let greeting = ‘say Hi’;

let times = 4;

if (times > 3) {

    let hello = ‘say Hello instead’;

    console.log(hello); // “say Hello instead”

}

console.log(hello); // hello is not defined

我们看到在其代码块(定义它的花括号)之外使用hello会返回错误。这是因为let变量是块范围的.

let 可以被修改但是不能被重新声明,就像var一样,用let声明的变量可以在其范围内被修改。但与var不同的是,let变量无法在其作用域内被重新声明。

Const

用const声明的变量保持常量值。 const声明与let声明有一些相似之处

const 声明的变量在块级作用域内,像let声明一样,const声明只能在声明它们的块级作用域中访问

const 不能被修改并且不能被重新声明,这意味着用const声明的变量的值保持不变。不能修改或重新声明。因此,如果我们使用const声明变量,那么我们将无法做到这一点:

const greeting = ‘say Hi’;

greeting = ‘say Hello instead’; // error: Assignment to constant variable.

或者这个这样:

const greeting = ‘say Hi’;

const greeting = ‘say Hello instead’; // error: Identifier ‘greeting’ has already been declared

因此,每个const声明都必须在声明时进行初始化。

当用const声明对象时,这种行为却有所不同。虽然不能更新const对象,但是可以更新该对象的属性。 因此,如果我们声明一个const对象为

const greeting = {

    message: ‘say Hi’,

    times: 4,

};

同样不能像下面这样做:

const greeting = {

    words: ‘Hello’,

    number: ‘five’,

}; // error:  Assignment to constant variable.

但我们可以这样做:

greeting.message = ‘say Hello instead’;

这将更新greeting.message的值,而不会返回错误。

延伸阅读:

二、用 const 还是用 let

ES6 里新增了两种声明变量的方式,let 和 const,加上原来的 var,一共就有三种方式来声明变量了。那到底该用哪个呢?关于“尽可能不用 var” 这一点,大家应该没有什么意见分歧(其实还是有少数人不这么想的),关于“是用 let 还是用 const”,社区里主要有两种不同的观点:

1. 默认全用 let,只在符合一些写代码的人的主观判断条件的时候用 const,下面举个这样的“主观判断条件”的例子(实际代码中用到 const 的几率大概会是 0.1%):

你能 100% 确定该变量永远不会在其它的代码行里被重新赋值,但是该变量的初始值有可能在未来会被调整(有点配置项的意思),且

该变量的初始值是个数字字面量(或者多个数字组成的数学运算表达式)、字符串字面量、布尔字面量、数组字面量、对象字面量、正则字面量、symbol “字面量”(打引号是因为 symbol 其实没有字面量),且

该变量是个全局变量,或者是模块内的全局变量

2. 默认全用 const,只有该变量需要被重新赋值才用 let (实际代码中用到 const 的几率大概会是 95%),和上面举的三个主观判断条件对比一下差异:

  • 不能 100% 确定该变量永远不会被重新赋值(可能只是现在是没被重新赋值,说不定未来会),或者
  • 该变量的初始值不是字面量,比如说是个函数调用表达式,或者
  • 该变量是个局部变量

名列前茅种用法是非常主观的,比如你用 const 的判断条件有可能就和我上面举的不一样,比如你也许觉得局部变量也可以用 const ?或者你觉的数组和对象是可变的值,怎么能用 const 呢?因为很主观,所以一个团队的代码风格很难达成一致,甚至只有你一个人维护的代码,const 的用法在不同的时间内也没有统一的规律,因为可能连你自己都没有明确的想过:“什么时候我应该用 const”,说白了就是“看心情”。而第二种用法是非常客观的,简单直接,没有含糊不清的地方,如果采用这种用法,至少团队代码风格的统一是不成问题的。

以上就是关于let和const的区别的内容希望对大家有帮助。