// 1. 赋值给一个变量
const declare = function (x) {
return x * x;
};
读到这部分时‘
疑惑注释为什么会是说 把这个函数表达式赋值给一个变量
在 JavaScript 中,使用 const
关键字声明的变量并不是常量(immutable),而是常量引用(immutable reference)。这意味着,使用 const
声明的变量不能再被重新赋值,但其所引用的对象(对于对象和数组)是可变的。
因此,虽然使用 const
关键字声明的变量不能再被重新赋值,但如果这个变量引用的是一个可变的对象,那么对象本身的内容是可以被修改的。这也就是为什么即使使用 const
声明的变量,仍然可以称之为变量的原因。
举个例子:
const arr = [1, 2, 3];
arr.push(4); // 可以修改数组内容,因为数组本身是可变的
console.log(arr); // 输出:[1, 2, 3, 4]const obj = { name: 'Alice' };
obj.age = 30; // 可以修改对象内容,因为对象本身是可变的
console.log(obj); // 输出:{ name: 'Alice', age: 30 }const x = 10;
x = 20; // 不能重新赋值给常量 x,会导致错误
总的来说,const
声明的变量不是常量,而是常量引用,它们引用的对象是可变的,但是不能再重新赋值给变量。
回到前面的疑惑之处
当我们使用 const
关键字声明变量时,即使该变量保存的是函数,也不能再次赋值。这意味着 declare
这个变量将始终引用相同的函数。但是,函数本身并没有被 const
限制,它仍然可以像普通函数一样调用。
通过代码来解释:
const declare = function (x) {return x * x;
};console.log(declare(2)); // 输出:4
console.log(declare(3)); // 输出:9
在这个例子中,我们声明了一个匿名函数,并将其赋值给名为 declare
的变量。这个函数接受一个参数 x
,并返回 x * x
的结果。由于使用了 const
关键字,所以无法重新为 declare
赋值。
然后,我们调用了 declare
函数两次,分别传入参数 2
和 3
。每次调用都会执行函数内部的计算,并返回计算结果。由于函数并没有被限制,所以我们可以在代码的其他地方随意调用它,传入不同的参数,并得到不同的结果。
综上所述,const
关键字确保了变量引用的不可变性,但并不限制函数本身的行为,使得我们可以方便地定义并使用函数。