【发布时间】:2016-10-29 20:30:55
【问题描述】:
没有详细解释 es6 导入和导出到底做了什么。有人将导入描述为只读视图。检查下面的代码:
// lib/counter.js
export let counter = 1;
export function increment() {
counter++;
}
export function decrement() {
counter--;
}
// src/main.js
import * as counter from '../../counter';
console.log(counter.counter); // 1
counter.increment();
console..log(counter.counter); // 2
我的问题是如果两个模块导入相同的计数器模块并且第一个模块增加计数器,第二个模块是否也会看到计数器增加? “导入”和“导出”在幕后做了什么?增量函数在什么环境下执行?增量函数的变量对象是什么?
// lib/counter.js
export let counter = 1;
export function increment() {
counter++;
}
export function decrement() {
counter--;
}
// src/main1.js
import * as counter from '../../counter';
console.log(counter.counter); // 1
counter.increment();
console..log(counter.counter); // 2
// src/main2.js
import * as counter from '../../counter';
console.log(counter.counter); // what is the result of this, 1 or 2?
在我看来,“导出”正在创建一个可由不同模块访问的全局对象,并将导出函数的上下文设置为该对象。如果是这种情况,那么设计对我来说是有线的,因为模块不知道其他模块在做什么。如果两个模块正在导入同一个模块(计数器),一个模块调用增量函数(上面的示例)导致值(计数器)发生变化,另一个模块不知道。
【问题讨论】:
标签: ecmascript-6 es6-module-loader