案例
在一个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 专有的情况,符号绑定。