【发布时间】:2016-12-13 17:48:22
【问题描述】:
我正在阅读 es6 导入语句 reference on MDN。语法:
import "my-module";
将导入整个模块仅用于副作用,而不导入任何绑定。我不确定副作用是什么意思。我一直用 angular 说import "angular"。 Angular 绑定到窗口但不返回对象。所以我不确定这是否会被称为副作用。
【问题讨论】:
标签: javascript import ecmascript-6
我正在阅读 es6 导入语句 reference on MDN。语法:
import "my-module";
将导入整个模块仅用于副作用,而不导入任何绑定。我不确定副作用是什么意思。我一直用 angular 说import "angular"。 Angular 绑定到窗口但不返回对象。所以我不确定这是否会被称为副作用。
【问题讨论】:
标签: javascript import ecmascript-6
当您需要导入不导出任何内容但执行其他操作的内容时,这是一个仅具有副作用的模块。你导入它只是为了初始化它。
纯和非纯模块
如果您将模块视为函数,那么仅通过导出其内容来影响作用域的模块就像一个始终返回相同内容的函数(一个没有参数的纯函数)。无论您将 React 15.01 导入多少次,您总是会得到一个包含相同方法的对象。
具有副作用的模块是以其他方式改变范围然后返回一些东西的模块,它的效果并不总是可预测的,并且可能受到外部力量的影响(非纯函数)。例如,polyfill 可能不会做任何事情,因为它发现它启用的功能已经被浏览器支持。
副作用示例:
window 对象,但不导出
任何东西。【讨论】:
这是一个例子:
//a.js
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”时,你会看到打印出来的消息,叫做side effects。
【讨论】:
考虑下面作为示例代码。 当您尝试导入某些东西时,它不会导出任何东西,但会做很多事情并覆盖您现有的代码(如果有的话),这就是副作用。
import Ember from 'ember';
Ember.RSVP.configure('onerror', function(error) {
....
});
app.js:
import './overrides/extra';
【讨论】: