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()
.
Funziona grazie questo ES6 violino: http://www.es6fiddle.net/ihw471ae/ – Wikunia
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
Sembra un bug in babel che dovresti segnalare. – Bergi