2015-10-19 54 views
5

我注意到babel transpiled爲什麼babel用(0,...)()包裝_sourceMapSupport.install()?

import { install } from 'source-map-support'; 
install(); 

var _sourceMapSupport = require('source-map-support'); 
(0, _sourceMapSupport.install)(); 

爲什麼babel用逗號與0作爲第一表達在install函數調用?

+1

@Oriol要公平,OP也在問爲什麼babel會這樣做。 – royhowie

+0

@Oriol royhowie是對的。我編輯了我的問題,請刪除重複的標記。 – borisdiakur

+0

是的,對不起。我重新解釋並解釋了原因。 – Oriol

回答

4

逗號在What does a comma do in JavaScript expressions?中解釋。基本上,它會評估所有表達式,並返回最後一個返回的值。

也許,使用它的原因是能夠調用該方法,就好像它不是方法一樣。

考慮一下這個功能:

function f() { return this; } 

並讓我們把它的方法:

var o = {f: f} 

然後,雖然f === o.f,結果將取決於你怎麼稱呼它:

o.f(); // o 
f(); // global object (in non-strict mode) 
f(); // undefined (in strict mode) 

因此,巴貝爾使用逗號方法來獲得對該函數的引用,而無需關聯與對象一起。這樣該方法可以被稱爲是全局函數,而不是一個。

(0, o.f)(); // global object (in non-strict mode) 
(0, o.f)(); // undefined (in strict mode)