【问题标题】:What is the absolute significance of const?const的绝对意义是什么?
【发布时间】:2019-04-21 14:15:01
【问题描述】:

所以我想澄清一下,这样我就知道我们在这里的真正目的是什么。我正在学习 es6 中的 'const' 函数,但我不确定它是如何改变任何东西的。

首先,如果我用 const 定义一个变量,然后用 var 为其分配一个新值,那么整个事情就会崩溃。这就是我的意思

<script>
const x = 10;
var  x = 10;
// x doesn't get any value assigned
</script>

其次,如果我用 var 定义了一个通用变量,然后用 const 定义了一个局部变量(我也可以用 var 或 let 完成),它只适用于用 const 定义局部变量但在外部的函数函数,它仍然是我用 var 定义的旧值。这就是我的意思

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

那么,'const' 有什么真正的区别呢?还是我有什么问题?

【问题讨论】:

  • const 表示它是一个常数,它的值不能被重新赋值。例如,缓存 DOM 节点可能很有用,因为无论如何您都不会改变集合。你的第二点,那就是 const 的美妙之处。例如,它不仅在函数内,而且在 if/else 或 for 循环内。所以你不用害怕覆盖函数范围的变量。
  • 我很高兴你认为 const 是一个辣妹,但我的意思是到目前为止,我观察到你可以使用 const、'let' 和 'var' 的地方可能更好选项
  • 不一定。 letconst 具有相同的范围限制,但允许重新分配。因此,如果您在不需要重新分配的变量上使用let,请使用const。使用const 明确告诉您(编码器)和浏览器无法重新分配变量。

标签: ecmascript-6 constants


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const

    【讨论】:

    • 如果您要更改它所持有的值,这是否意味着您要重新分配变量标识符?是一样的吧?
    • 没有。例如,我可以向 const 对象添加属性,但不能将标识符链接到新对象。
    猜你喜欢
    • 2011-06-30
    • 2017-02-23
    • 2023-04-08
    • 2011-07-01
    • 2011-12-04
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多