Gemäß der Spezifikation ES6, die Syntax'this' innerhalb einer Vorlage wörtlichen
foo`Hello!`
genau wie
foo('Hello!')
Putting eine Vorlage wörtliche nach einem Ausdruck verhalten soll löst eine Funktion Aufruf , ähnlich wie eine Parameterliste (durch Kommas getrennte Werte in Klammern) einen Funktionsaufruf auslöst. Der vorhergehende Code entspricht dem folgenden Funktionsaufruf (in Wirklichkeit erhält die Funktion mehr Informationen, aber das wird später erklärt).
jedoch im folgenden Ausschnitt, einen Wert einer Funktion Bindung bewirkt, dass die 2-Syntaxen unterschiedlich verhalten:
function alertParans() { alert(this) }
function alertNoParans() { alert `${this}` }
var executeParans = alertParans.bind('roman empire');
var executeNoParans = alertNoParans.bind('greek empire');
executeParans();
executeNoParans();
der erste Aufruf druckt ' Römisches Reich ', während die zweite immer nur ein Komma druckt. Warum?
@Claies nein, genau darum geht es bei der Frage. Er verwendet "alert" als Tagging-Funktion (für die es natürlich nicht gedacht war). – nils
[Verwenden Sie 'alert()' nicht zum Debuggen.] (Http://stackoverflow.com/questions/8203473/why-is-console-log-considered-better-than-alert) –
@Claies - Nein, die Klammern sind nicht erforderlich -> https://jsfiddle.net/gcbhvqu5/1/ aber in diesem Fall lösen sie das Problem, das ist nicht das Fehlen von Klammern, sondern die Verwendung von Alarm als Tag-Funktion – adeneo