2015-12-07 9 views
7

Abbiamo cercato di porta il seguente codice per ES6:codice Transpiled getta di errore quando mascherare un parametro con una variabile oggetto

function apitest(data) { 
 
    data.cb(true); 
 
} 
 

 
function test(cb) { 
 
    apitest({cb: function(data) { 
 
     commit(cb,data); 
 
    }}); 
 

 
    function commit(cb,data) { 
 
     cb(data); 
 
    } 
 
} 
 

 
test(data => { 
 
    document.write(data); 
 
});

potrebbe sembrare un po 'di confusione, ma fa quello che si aspetta (restituisce true) e non genera errori.

Tuttavia, Babel transpiles a:

"use strict"; 
 

 
function apitest(data) { 
 
    data.cb(true); 
 
} 
 

 
function test(_cb) { 
 
    apitest({ cb: function cb(data) { 
 
      commit(_cb, data); 
 
     } }); 
 

 
    function commit(_cb, data) { 
 
     cb(data); 
 
    } 
 
} 
 

 
test(function (data) { 
 
    document.write(data); 
 
}); 
 

 
//# sourceMappingURL=test4.js.map

Questo codice non riesce dal momento che il cb() chiamato all'interno commit() non ha un carattere di sottolineatura.

Indipendentemente dal fatto che si debba scrivere questo tipo di codice: la nostra sintassi è errata o si tratta di un bug in Babel?

La mia comprensione è che la definizione di cb all'interno dell'oggetto deve mascherare il parametro passato. Babel assegna nomi diversi alla variabile utilizzata nell'oggetto e nella funzione di inclusione dando un nome alla funzione anonima (perché dovrebbe farlo comunque?). Dopodiché, dovrebbe rinominare la chiamata di funzione all'interno di commit().

+2

Funziona grazie questo ES6 violino: http://www.es6fiddle.net/ihw471ae/ – Wikunia

+3

Sembra che il problema qui è che Babel è dare funzioni anonime nei letterali degli oggetti lo stesso nome della chiave stessa. Ottimo per il debug, non va bene per il tuo caso d'uso. Sembra pensare che la funzione 'cb' appena creata sia accessibile da' commit() 'ma ovviamente non lo è. Dovresti presentare un bug :) – CodingIntrigue

+3

Sembra un bug in babel che dovresti segnalare. – Bergi

risposta

1

Questo è stato un bug in Babel 5 e che è fisso in Babel 6.

+0

Questa sembra essere la risposta. –

+0

Abbiamo archiviato un bug report che è stato risolto (abbastanza velocemente, potrei aggiungere). – chaosflaws

Problemi correlati