Ich bin mir nicht sicher, wie ich das erklären soll, aber wenn ich renne
console.log`1`
In Google Chrome bekomme ich eine Ausgabe wie
console.log`1`
VM12380:2 ["1", raw: Array[1]]
Warum ruft der Backtick die Protokollfunktion auf und warum erstellt er einen Index von raw: Array[1]
?
Frage, die von Catgocat im JS-Raum aufgeworfen wurde, aber keine Antworten ergaben einen Sinn, außer etwas über Templating-Strings das passte nicht wirklich, warum das passiert.
Es heißt Tagged Template in ES-6 mehr darüber kann man lesen Hier, lustig fand ich den Link im markierten Bereich des sehr Chats.
Aber der relevante Teil des Codes ist unten (Sie können grundsätzlich eine gefilterte Sortierung erstellen).
function tag(strings, ...values) {
assert(strings[0] === 'a');
assert(strings[1] === 'b');
assert(values[0] === 42);
return 'whatever';
}
tag `a${ 42 }b` // "whatever"
Im Grunde ist es lediglich das Taggen der “1” mit der Funktion console.log, wie es bei jeder anderen Funktion der Fall wäre. Die Markierungsfunktionen akzeptieren geparste Werte von Vorlagenzeichenfolgen und die Werte separat, auf denen weitere Aufgaben ausgeführt werden können.
Babel transpiliert den obigen Code nach
var _taggedTemplateLiteralLoose = function (strings, raw) { strings.raw = raw; return strings; };
console.log(_taggedTemplateLiteralLoose(["1"], ["1"]));
Wie Sie im obigen Beispiel sehen können, wird der Tagging-Funktion (console.log) nach der Transpilation durch babel der Rückgabewert des folgenden es6->5-transpilierten Codes übergeben.
_taggedTemplateLiteralLoose( ["1"], ["1"] );
Der Rückgabewert dieser Funktion wird an console.log übergeben, das dann das Array ausgibt.
Verwandte: Javascript Es6-getaggte Vorlagen – Wann wird Raw verwendet? Wann wird Cooking verwendet?, Wie interpretieren mit ES6 gekennzeichnete Vorlagenfunktionen ihre Argumentreihenfolge?
– Felix Klinge
15. April 2015 um 20:56 Uhr