导入后,es6导出是否会在导入时更改?

时间:2017-06-23 09:31:40

标签: javascript ecmascript-6

导入后导出的es6导出是否会更改?

为了便于阅读并将重要内容放在首位,我们考虑使用如下文件结构:

export default myFunction;
myFunction.$inject = ['something'];
function myFunction(){
  //
}

但是根据定义,导入时为$ inject定义的值是否可用?

import myFunction from './myFunction';
if(myFunction.$inject)
// What value has myFunction.$inject ?

导入的文件是否刚刚导入到导出语句中?

对于我们使用Webpack和BabelJS的设置,似乎设置了值,但对于严格的es6解释是否也适用?

1 个答案:

答案 0 :(得分:1)

  

但是根据定义,导入时为$ inject定义的值是否可用?

是的,它会。但这与ES6模块无关。由于对象(函数是对象)被表示为引用,因此您正在执行的任何突变在其他任何引用该对象的位置都可见。

这个更有趣的方面是:

// a.js
export var x = 42;
export function changeValue() {
  x = 21;
};

// b.js
import {x, changeValue} from './b.js';
console.log(x); // 42
changeValue();
console.log(x); // 21

导入和导出 live 。这意味着为导出分配新值也会导致导入更新。您可以将其视为assign by reference:导入绑定没有导出值的副本,而是对导出绑定内存位置的引用。