2015-06-24 17 views
6

- ama transpilers yapmak - Ben Sadece bu satırları transpile gelmez görmek istedim Bu basit örnekteBabil'in komik ithalat

import { getUsefulContents } from "file.js"; 
getUsefulContents("http://www.example.com", data => { 
    doSomethingUseful(data); 
    }); 

ile Babel test etti. Özellikle (0, _fileJs.getUsefulContents) parçası, orada neler oluyor -

"use strict"; 

var _fileJs = require("file.js"); 

(0, _fileJs.getUsefulContents)("http://www.example.com", function (data) { 
    doSomethingUseful(data); 
}); 

son satırı bana gizemli görünüyor

: Benim için sürpriz aşağıdaki çıktıyı üretti? Bu satırdaki (0, ...)'un amacı nedir?

cevap

9

Böyle bir işlevi çağırmak, onu genel bağlamda çağırmaya zorlar. o (0, filesJs) değerlendirir zaman bir ,

var a = 1, 
    b = 2, 
    ... 
kullanarak birden çok değişkeni bildirebilirsiniz nasıl benzer parantez içinde tabloların, her geçiyor çünkü

function whoAmI() { 
 
    document.querySelector('pre').innerText += this.name + '\n'; 
 
} 
 
window.name = 'window'; 
 
var mike = { 
 
    name: 'mike', 
 
    whoAmI: whoAmI 
 
}; 
 
mike.whoAmI(); 
 
(0, mike.whoAmI)();
<pre></pre>

bu işleri nedeni

Son ifade bir işleve başvurulduğunda, işlev çağrısını sonraki parantez kümesinde değerlendirirken kullanır. İfadenin zaten değerlendirilmiş olması nedeniyle _filesJs içeriği kaybolur. Bu etkili Bunu yaparken aynıdır:

0; // Legal, just pointless 
var f = _filesJs.getUsefulContents; 
f("http://example.com", ...); 
+0

vay, bu :) güzel - Bu sıkı kullanmak ' 'çalışmaz –

+1

bilmek güzel, cevabın için teşekkür ederim;' modu. –

+0

@NinaScholz iyi bir nokta ve bunun neden kullanıldığının nedeni hala benim için net değil –