es6导入副作用的含义

ran*_*ing 28 javascript import ecmascript-6

我正在阅读MDN上的es6 import语句参考.语法:

import "my-module";
Run Code Online (Sandbox Code Playgroud)

将导入整个模块仅用于副作用,而不导入任何绑定.我不确定副作用是什么意思.我一直在使用角度import "angular".Angular绑定到窗口但不返回对象.所以我不确定这是否会被视为副作用.

Ori*_*ori 31

当您需要导入不导出任何内容但执行其他操作的内容时,这是一个仅限副作用的模块.您只导入它以初始化它.

纯和非纯模块

如果您将模块视为函数,那么仅通过导出其内容来影响范围的模块就像一个总是返回相同内容的函数(没有参数的纯函数).无论你导入多少次反应15.01,你总会得到一个包含相同方法的对象.

具有副作用的模块是以其他方式改变范围然后返回某些东西的模块,并且它的效果并不总是可预测的,并且可能受到外力(非纯函数)的影响.例如,polyfill可能没有做任何事情,因为它发现浏览器已经支持它启用的功能.

副作用的例子:

  • Angular绑定到全局window对象,但不导出任何内容.
  • 在不支持它们的浏览器中启用ES6功能的polyfill,如babel polyfill是一种副作用.
  • 许多jQuery插件将自己附加到全局jQuery对象.
  • 在后台运行的分析模块,监控用户交互并将数据发送到服务器.
  • 如果您不使用CSS模块,在webpack中导入CSS可能会被视为副作用.


der*_*rek 11

这是一个例子:

//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";
Run Code Online (Sandbox Code Playgroud)

当您运行"b.js"时,您将看到被打印的消息

副作用

.