Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ecmascript 6 const的绝对意义是什么?_Ecmascript 6_Constants - Fatal编程技术网

Ecmascript 6 const的绝对意义是什么?

Ecmascript 6 const的绝对意义是什么?,ecmascript-6,constants,Ecmascript 6,Constants,所以我想澄清一下,这样我才知道我们到底在做什么。我正在学习es6中的“const”函数,但我不确定它是如何改变任何东西的 首先,如果我用const定义一个变量,然后用var给它赋值,整个过程就会崩溃。这就是我的意思 <script> const x = 10; var x = 10; // x doesn't get any value assigned </script> <script> var x = 10; // Here x is 10 {

所以我想澄清一下,这样我才知道我们到底在做什么。我正在学习es6中的“const”函数,但我不确定它是如何改变任何东西的

首先,如果我用const定义一个变量,然后用var给它赋值,整个过程就会崩溃。这就是我的意思

<script>
const x = 10;
var  x = 10;
// x doesn't get any value assigned
</script>
<script>
var  x = 10;
  // Here x is 10
{  
const x = 2;
  // Here x is 2
}
// Here x is 10
</script>
第二,如果我用var定义了一个通用变量,然后用const定义了一个局部变量,我可以用var或let做同样的事情,它只在局部变量用const定义的函数中起作用,但在函数之外,它仍然是我用var定义的旧值。我的意思是

<script>
const x = 10;
var  x = 10;
// x doesn't get any value assigned
</script>
<script>
var  x = 10;
  // Here x is 10
{  
const x = 2;
  // Here x is 2
}
// Here x is 10
</script>

那么“const”到底有什么区别呢?还是我有什么地方出错了?

我认为它与范围相关,而不是const/var

const声明创建对值的只读引用。这并不意味着它所持有的值是不可变的,只是变量标识符不能被重新分配


更多信息:

首先,如果您正在编写ES6,最好停止使用var。只需对常量使用const,对变量使用let

第一个示例崩溃,因为您正在重新定义已在该范围内定义的常量。重新定义let变量时也会发生同样的情况。我知道var允许重新定义,但这使得代码很难阅读

第二个示例按预期工作,因为您正在新范围中定义常量。下面的例子也适用

<script>
const x = 10;
{  
  const x = 2;
}
</script>

底线:不能在同一范围内重新定义变量[let]和常量[constants]。

const表示它是一个常量,不能重新分配其值。例如,缓存DOM节点非常有用,因为您永远不会改变集合。还有你的第二点,那就是康斯特的美。它的范围不仅限于函数,还包括if/else或for循环。所以你不害怕覆盖函数范围的变量。我很高兴你认为const是一个热门的女孩,但我的观点是,到目前为止,我已经观察到,在任何可以使用const的地方,'let'和'var'可能都是更好的选择。let与const具有相同的范围限制,但允许重新分配。因此,如果在不需要重新分配的变量上使用let,请使用const。const的使用明确地告诉编码器和浏览器不能重新分配变量。如果要更改变量所包含的值,这不意味着要重新分配变量标识符吗?这是同一件事,对吗?不。例如,我可以向const对象添加属性,但我不能将标识符链接到新对象。