Warum ist "das" in einer anonymen Funktion undefiniert, wenn strict verwendet wird?
Warum ist diese in einer anonymen Funktion nicht definiert, wenn mit javascript im strict-Modus? Ich verstehe, warum dies sinnvoll ist, aber ich konnte keine konkrete Antwort.
Beispiel:
(function () {
"use strict";
this.foo = "bar"; //*this* is undefined, why?
}());
Test in einem fiddle: http://jsfiddle.net/Pyr5g/1/
Überprüfen Sie heraus die logger (firebug).
InformationsquelleAutor der Frage TJ. | 2012-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist, weil, bis ECMAscript-262 edition 5, gab es eine große Verwirrung, wenn Menschen, die wo mit der
constructor pattern
vergessen haben, verwenden Sie dienew
Schlüsselwort. Wenn Sie vergessen haben, dennew
beim Aufruf einer Konstruktor-Funktion in ES3this
verwiesen, das Globale Objekt (window
im browser), und Sie würden die Klamotten die Globale Objekt-Variablen.Das war schrecklich Verhalten und damit die Leute bei ECMA beschlossen, nur um
this
zuundefined
.Beispiel:
Die Letzte Zeile würde einen Fehler auslösen, in ES5 strict
(die ein viel besseres Verhalten)
InformationsquelleAutor der Antwort jAndy
Gibt es einen Mechanismus, genannt "Boxen", die wraps oder ändern Sie die
this
Objekt vor Eintritt in den Kontext der aufgerufenen Funktion.In deinem Fall der Wert der
this
sollteundefined
weil Sie nicht den Aufruf der Funktion als Methode eines Objekts.Wenn nicht-strict-Modus", in diesem Fall, diese wird ersetzt durch die
window
Objekt.In
strict
- Modus-es ist immer unverändert, deswegen ist esundefined
hier.Weitere Informationen finden Sie unter
https://developer.mozilla.org/en/JavaScript/Strict_mode
InformationsquelleAutor der Antwort Samuel Rossille
Laut Dieser Stack Overflow-Antwortdie Sie verwenden können
this
im inneren anonyme Funktionen, einfach durch aufrufen.call(this)
am Ende.InformationsquelleAutor der Antwort ReverseTales