JS 符号绑定。常量可以被修改?!

发布时间 2023-11-17 11:17:54作者: mcayear

案例

在一个js模块a中export了一个bool型变量x,在另一个模块b中import它(单项引入的)。

如果后面通过调用a的某个方法修改了x的值,结果b中引入的这个变量的值也跟着变了,这是什么原理?

按理说js的变量是引用型的,b中引入的x应该就只是新定义了一个变量来取得x当时的值而已,后面a中的x值变了,不应该能自动更新b中引入的值啊!

难道说有什么特殊机制?

解答

// 1.js

import { count, increase } from './2.js';
console.log(count);// 1
count = 2;// 从模块导入的值都是常量,所以它不允许被重新赋值
// 2.js

export let count = 1;
export function increase() {
  count++;
}

未能赋值是正常逻辑。

但是我们使用 increase() 方法后程序便会产生意料之外的结果

// 1.js

import { count, increase } from './2.js';
console.log(count);// 1
increase();
console.log(count);// 2

这就是 ESM 专有的情况,符号绑定。

具体见视频:https://www.alipan.com/s/62H4fSwKtce