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

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

怪我咯
怪我咯

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

reply all (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 的。

          Latest Downloads
          More>
          Web Effects
          Website Source Code
          Website Materials
          Front End Template
          About us Disclaimer Sitemap
          php.cn:Public welfare online PHP training,Help PHP learners grow quickly!