Ho letto here che non è necessario inserire un punto e virgola dopo le esportazioni predefinite. Quindi, questo programma ha un punto e virgola inutile:Punto e virgola dopo l'esportazione predefinita
export default function() {};
Ma se il mio modulo continua in questo modo:
export default function() {};
(() => {
// creating a new function scope
})();
allora non può lasciare il punto e virgola.
Quindi cosa sta succedendo qui? La grammatica dice che non ho bisogno del punto e virgola, ma se lo lascio il codice significa qualcos'altro?
UPDATE:
Se lascio il punto e virgola:
export default function() {}
(() => {
// creating a new function scope
})();
allora la funzione esportata viene chiamata invece di essere esportato. babeljs.io compila quest'ultimo in:
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = (function() {})(function() {
// creating a new function scope
})();
;
module.exports = exports["default"];
Più precisamente dopo che viene chiamato viene generato un errore, perché il valore di ritorno della prima funzione anche viene chiamata (ma che non è una funzione). L'errore che ottengo in cromo è questo:
Uncaught TypeError: (intermediate value)(...) is not a function(…)
Cosa ti impedisce di lasciare il punto e virgola nel secondo caso? Qualcosa ti dà un errore? – loganfsmyth
@loganfsmyth si veda il mio aggiornamento –
possibile duplicato di [Esportazione predefinita in ES6. Perché non hai bisogno di un punto e virgola?] (Http://stackoverflow.com/q/33482309/1048572) (se la tua domanda non riguardava il bug di babele) – Bergi