2016-12-13 48 views
12

我正在閱讀es6導入語句reference on MDN。語法:es6導入副作用含義

import "my-module"; 

將僅導入整個模塊的副作用,而不導入任何綁定。我不確定副作用是什麼意思。我一直在用角度import "angular"。 Angular綁定到窗口,但不返回對象。所以我不確定這是否會被完全稱爲副作用。

回答

12

當您需要導入某些不導出任何內容但執行其他操作的東西時,這是僅限副作用模塊。您只導入它來初始化它。

純和非純模塊

如果你仔細想想模塊,功能模塊,只有通過導出它的內容的影響範圍就是這樣總是返回同樣的事情(一個純函數不帶參數的函數)。無論你將導入多少次反應15.01,你總是會得到一個包含相同方法的對象。

帶有副作用的模塊是以其他方式改變範圍然後返回某些東西的模塊,它的影響並不總是可預測的,並且可能受到外力(非純功能)的影響。例如,polyfill可能無法做任何事情,因爲它發現它啓用的功能已被瀏覽器支持。副作用

例子:

  • 角結合全球window對象,但不出口 什麼。
  • 在瀏覽器中啓用ES6功能的polyfill不支持 ,如babel polyfill是一種副作用。
  • 許多jQuery插件將自己附加到全局jQuery對象。
  • 在後臺運行的分析模塊,監視用戶交互並將數據發送到服務器。
  • 如果你不使用CSS模塊,在webpack中導入CSS可以被認爲是一種副作用。
0

「副作用」可能意味着很多事情。它可能會修改全局變量,它可能使用了一些環境API(例如,在Node.js中寫入文件,或者在瀏覽器中調用Ajax)。

2

請看下面的示例代碼。 當你嘗試導入某些東西時,它不會導出任何內容,而是執行很多操作並覆蓋現有代碼(如果有的話),這是副作用。

import Ember from 'ember'; 
Ember.RSVP.configure('onerror', function(error) { 
    .... 
}); 

app.js:

import './overrides/extra'; 
5

下面是一個例子:

//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」,你會看到打印的信息,這是所謂的

副作用