javascript的常量相关问题【const】
怪我咯
怪我咯 2017-04-11 11:56:59
0
4
416

在MDN的js教程 (const)中有提到:【注意区分常量的值和常量指向的值的不同】
请问要如何理解呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(4)
洪涛

看过《JS高程》没?
知道引用型变量基本类型变量的区别吗?

如果你看过,并且明白这俩是啥意思,类比到const就行了。
所谓常量的值就是指基本类型常量,而常量指向的值就是指引用类型常量。

常量的意义当然就是不可变。基本类型常量的值不可变很容易理解,但是对于引用类型常量,这类常量的值也不可变,但是是计算机意义上的值不可变,它本质上的值记录的是所引用数据的内存地址。所以对于这类常量而言,const的效果仅限于引用不可变,但是其实际指向的值是可变的。

举个例子,下面这俩操作,上面是非法的,而下面是合法的:

const obj = {a: 1};

// 非法操作
obj = {a: 2};

// 合法操作
obj.a = 2;
Ty80

如果const a=123这种声明一个常量赋值一个基本类型值,没有任何问题;
但是如果const a={name:'Li'}这种常量赋值了一个引用类型值,常量中保存的是一个地址,这个地址不能变,但是我们可以修改地址指向对象的属性。

Ty80

const是只读的常量、指向数据所在的地址

刘奇

ES6 你可能不知道的事 - 基础篇

  • 块作用域和构造let和const

function calculateTotalAmount (vip) {
  var amount = 0; // probably should also be let, but you can mix var and let
  if (vip) {
    let amount = 1; // first amount is still 0
  } 
  { // more crazy blocks!
    let amount = 100; // first amount is still 0
    {
      let amount = 1000; // first amount is still 0
    }
  }  
  return amount;
}
 
console.log(calculateTotalAmount(true));    // 0
  • const let

//谈到const,就更加容易了;它就是一个不变量,也是块级作用域就像let一样。下面是一个演示,这里有一堆常量,它们互不影响,因为它们属于不同的块级作用域:
function calculateTotalAmount (vip) {
  const amount = 0;  
  if (vip) {
    const amount = 1;
  } 
  { // more crazy blocks!
    const amount = 100 ;
    {
      const amount = 1000;
    }
  }  
  return amount;
}
console.log(calculateTotalAmount(true));
//从我个人看来,let 和const使这个语言变复杂了。没有它们的话,我们只需考虑一种方式,现在有许多种场景需要考虑。

就 let 而言,他的使用场景应该是相对较少的,我们只会在 loop(for,while 循环)及少量必须重定义的变量上用到他。

猜想:就执行效率而言,const 由于不可以重新赋值的特性,所以可以做更多语法静态分析方面的优化,从而有更高的执行效率。

所以上面代码中,所有使用 let 的部分,其实都应该是用 const 的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板