【问题标题】:Will an es6 export changed after beeing exported be changed on import?es6 导出后的导出是否会在导入时更改?
【发布时间】:2017-06-23 09:31:39
【问题描述】:

蜜蜂导出后的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 解释是否如此?

【问题讨论】:

  • 它只是传递一个 reference 所以它有点 live

标签: javascript ecmascript-6


【解决方案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

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

【讨论】:

  • 那么先处理包含导出的整个文件,再处理导入?
  • 不,导入的模块作为评估导入声明的一部分进行评估。
  • 但是在进口过程中,它是作为一个整体进行评估的,而不仅仅是出口申报?
  • 是的,毕竟一个模块可以有多个导出。
猜你喜欢
  • 2020-12-19
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
相关资源
最近更新 更多