我正在阅读MDN上关于es6导入语句的参考文献。该语法:
import "my-module";
将只为副作用导入整个模块,而不导入任何绑定。我不确定 副作用 意味着什么。我一直在使用 angular,通过 import "angular"
来引用它。Angular 绑定到 window,但没有返回对象。所以我不确定这是否可以被称为一个确切的副作用。
我正在阅读MDN上关于es6导入语句的参考文献。该语法:
import "my-module";
将只为副作用导入整个模块,而不导入任何绑定。我不确定 副作用 意味着什么。我一直在使用 angular,通过 import "angular"
来引用它。Angular 绑定到 window,但没有返回对象。所以我不确定这是否可以被称为一个确切的副作用。
当你需要导入一个没有导出任何内容但做其他事情的模块时,这是一个只产生副作用的模块。你只需要导入它以初始化它。
纯模块和非纯模块
如果你把模块看作是函数,那么只通过导出其内容来影响作用域的模块就像一个总是返回相同结果(不带参数的纯函数)的函数。无论你导入多少次 react 15.01,你都会得到一个包含相同方法的对象。
具有副作用的模块是一种以其他方式改变作用域的模块,而它的影响并不总是可预测的,并且可能受外部力量的影响(非纯函数)。例如,polyfill 可能什么也不做,因为它发现所启用的功能已经被浏览器支持了。
副作用示例:
window
对象,但不导出任何东西。这是一个例子:
//a.js
export function print1()
{
console.log("export print1 is working");
}
function print2()
{
console.log("non-export print2 is working");
}
print1();
print2();
//b.js
import "a.js";
当你运行 "b.js" 时,你将会看到打印出的信息,这些信息被称为 副作用
。
import Ember from 'ember';
Ember.RSVP.configure('onerror', function(error) {
....
});
app.js:
import './overrides/extra';
print1()
和print2()
也只会被调用一次 :) - Prid