2015-10-19 8 views
5

Zauważyłem, że babel transpiledDlaczego babel zawija _sourceMapSupport.install() z (0, ...)()?

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

do

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

Dlaczego babel użyć operatora przecinek z 0 jako pierwszego słowa w wywołaniu funkcji install?

+1

@Oriol za uczciwość, OP także pyta, dlaczego Babel to robi. – royhowie

+0

@Oriol royhowie ma rację. Zmieniłem moje pytanie, usuń duplikat znaku. – borisdiakur

+0

Tak, przepraszam. Ponownie otworzyłem i wyjaśniłem powód. – Oriol

Odpowiedz

4

Przecinek jest wyjaśniony w What does a comma do in JavaScript expressions?. zasadniczo ocenia wszystkie wyrażenia i zwraca wartość zwróconą przez ostatnią.

Prawdopodobnie powodem tego jest możliwość wywoływania metody tak, jakby nie była to metoda.

Rozważmy tę funkcję:

function f() { return this; } 

I zróbmy to metodę:

var o = {f: f} 

Następnie chociaż f === o.f, wynik będzie się różnić w zależności od tego, jak to nazwać:

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

Babel używa podejścia z przecinkiem, aby uzyskać odniesienie do funkcji, bez asocjacji przy pomocy obiektu. W ten sposób można nazwać metodę tak, jakby była funkcją globalną, bez bycia nią.

Powiązane problemy