在MDN的js教程 (const)中有提到:【注意区分常量的值和常量指向的值的不同】
请问要如何理解呢?
如果const a=123
这种声明一个常量赋值一个基本类型值,没有任何问题;
但是如果const a={name:'Li'}
这种常量赋值了一个引用类型值,常量中保存的是一个地址,这个地址不能变,但是我们可以修改地址指向对象的属性。
块作用域和构造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 的。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
看过《JS高程》没?
知道
引用型变量
和基本类型变量
的区别吗?如果你看过,并且明白这俩是啥意思,类比到
const
就行了。所谓
常量的值
就是指基本类型
常量,而常量指向的值
就是指引用类型
常量。常量的意义当然就是
值
不可变。基本类型
常量的值不可变很容易理解,但是对于引用类型
常量,这类常量的值也不可变,但是是计算机意义上的值不可变,它本质上的值记录的是所引用数据的内存地址。所以对于这类常量而言,const
的效果仅限于引用不可变,但是其实际指向的值
是可变的。举个例子,下面这俩操作,上面是非法的,而下面是合法的: