Ich sehe zufällig Code von babel.js generiert. Der Original-Quellcode ist wie folgt:Warum Babel.js Generator in nicht-sequentiellen Switch-Fall transformieren?
function * foo() {
yield 1;
yield 2;
yield 3;
}
Der erzeugte ES5-Code ist wie:
"use strict";
var _marked = [foo].map(regeneratorRuntime.mark);
function foo() {
return regeneratorRuntime.wrap(function foo$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return 1;
case 2:
_context.next = 4;
return 2;
case 4:
_context.next = 6;
return 3;
case 6:
case "end":
return _context.stop();
}
}
}, _marked[0], this);
}
Meine Frage ist: warum der erzeugte Fallwert ist 0, 2, 4 und 6 anstelle von 0, 1, 2, 3?
Gibt es Gründe für dieses Design?
Ich denke, um diese Frage zu beantworten, sollten Sie nur die Quelle lesen. – Bergi
Der Quellcode ist hier https://github.com/babel/babel/tree/master/packages/babel-plugin-transforme-regenerator, aber ehrlich gesagt ist es schwer, die Bedeutung davon zu verstehen. –