为什么要是使用const修饰符及其好处

7 篇文章 0 订阅
4 篇文章 0 订阅

什么是const和let

我们都知道使用const修饰会有一下作用。
1、描述

      此声明创建一个常量,其作用域可以是全局或本地声明的块。与var变量不同,全局常量不会变为 window 对象的属性。需要一个常数的初始化器;也就是说,您必须在声明的同一语句中指定它的值(这是有道理的,因为以后不能更改)。

       const 声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。例如,在引用内容是对象的情况下,这意味着可以改变对象的内容(例如,其参数)。

       这就希望大家了解一下什么是“暂存死区”。

暂时性死区

从一个代码块的开始直到代码执行到声明变量的行之前,let 或 const 声明的变量都处于“暂时性死区”(Temporal dead zone,TDZ)中。

当变量处于暂时性死区之中时,其尚未被初始化,尝试访问变量将抛出 ReferenceError。当代码执行到声明变量所在的行时,变量被初始化为一个值。如果声明中未指定初始值,则变量将被初始化为 undefined。

{ // TDZ starts at beginning of scope
  console.log(bar); // undefined
  console.log(foo); // ReferenceError
  var bar = 1;
  let foo = 2; // End of TDZ (for foo)
}

这样看来它的好处就显而易见了

  1. 常量:变量命名的同时必须要付一个初始值,这样就规范了常量的数据类型,避免意义模糊的数字出现。
  2. 作用域:const命名的变量不存在 变量提升的问题,同时有自己的扩及作用域,不会提升到全局作用域,这样就防止了数据污染
  3. 数组对象:首先再说数组和对象的时候,我们要明确一点,const定义的对象无法修改的内容是,对象名称无法修改,但是里面的key和value是可以修改和添加的,只是我们无法修改 比如:下面的代码块。这样的好处就防止了我们书写导致对象被重写的忧患,防止被意外修改,增强了程序的健壮性。
  4. 提高了程序的运行效率。编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,使得它成为一个编译期间的常量,没有了存储和读内存操作,使得它的运行效率也很高。

第三问的代码 比如:

const MY_OBJECT = {'key': 'value'};

// 重写对象和上面一样会失败
// Uncaught TypeError: Assignment to constant variable.
MY_OBJECT = {'OTHER_KEY': 'value'};

// 对象属性并不在保护的范围内
// 下面这个声明会成功执行
MY_OBJECT.key = 'otherValue'; // Use Object.freeze() to make object immutable

// 也可以用来定义数组
const MY_ARRAY = [];
// 可以向数组填充数据
MY_ARRAY.push('A'); // ["A"]
// 但是,将一个新数组赋给变量会引发错误
// Uncaught TypeError: Assignment to constant variable.
MY_ARRAY = ['B'];

总结:反正以后的项目内容建议大家都要使用const,尽量不要使用var,var使用let进行替换,非必要条件下不使用var。
这是const和let的官网MDN介绍是比较官方的内容,建议大家有时间仔细读一读真的很不错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值