实时绑定是什么意思?

Ish*_*tel 8 javascript binding es6-modules

我正在学习一个教程,它说

ES 模块使用实时绑定。这意味着支持循环依赖的特性。

但是我不是很清楚这个概念。这是什么意思?

mku*_*ayk 11

实时绑定是 ES 模块中引入的一个概念。这意味着当导出模块更改一个值时,该更改将从导入器端可见。CommonJS 模块不是这种情况。模块导出在 CommonJS 中复制。因此导入模块无法看到导出端发生的变化。


无害环境管理

计数器.mjs

export let count = 1;
export function increment() {
    ++count;
}
Run Code Online (Sandbox Code Playgroud)

索引.mjs

import { count, increment } from './counter.mjs';
console.log(count);
increment();
console.log(count);
Run Code Online (Sandbox Code Playgroud)

输出

$ node --experimental-modules index.mjs
1
2
Run Code Online (Sandbox Code Playgroud)

CJS

计数器.js

let count = 1;
function increment() {
    ++count;
}

exports.count = count;
exports.increment = increment;
Run Code Online (Sandbox Code Playgroud)

索引.js

const { count, increment } = require('./counter.js');
console.log(count);
increment();
console.log(count);
Run Code Online (Sandbox Code Playgroud)

输出

$ node index.js
1
1
Run Code Online (Sandbox Code Playgroud)

有关该主题的更多资源:

  • 值得注意的是,实时绑定为导出器和导入器提供了一个公共内存地址,即两者都指向相同的内存位置。 (5认同)
  • 这个答案其实是错误的。在commonJS中,导出器所做的更改实际上无处不在。CJS 示例中的“increment”函数应该改为改变exports.count。然后这种变化就会体现在各处。 (2认同)