Wenn Sie im strikten Modus arbeiten, dürfen Sie nicht auf Variablen zugreifen, die zuvor nicht deklariert wurden. So muss isTrue
deklariert werden, bevor Sie darauf zugreifen können. Also, wenn Sie die var
davor entfernen und es nirgendwo anders deklariert wird, wird das ein Fehler sein.
Zitiert aus dem MDN page on strict mode:
Zuerst Strict-Modus macht es unmöglich, aus Versehen auf globale Variablen zu erstellen. Bei normalem JavaScript wird eine Variable in einer Zuweisung falsch beschriftet erstellt eine neue Eigenschaft auf dem globalen Objekt und weiterhin " " arbeiten (obwohl zukünftige Fehler möglich ist: wahrscheinlich, in modernen JavaScript). Zuordnungen, die versehentlich globale Variablen statt throw im Strict-Modus schaffen würde:
Der Teil Ihrer Frage zu undefined
ist ein wenig komplizierter. Aufgrund der variablen Hebe, wo eine variable Deklaration durch den Compiler an die Spitze des Anwendungsbereichs gehisst wird es erklärt, wird Ihr Code mit dem var
Aussage entspricht dies:
var isTrue;
try
{
isDefined(isTrue);
}
catch (ex)
{
isTrue = false;
}
isTrue = true;
Wenn Sie also isDefined(isTrue)
nennen, der Wert von isTrue
ist undefined
. Es wurde deklariert, aber nicht initialisiert, daher ist sein Wert undefined
. Wenn Sie die var
-Anweisung nicht haben, ist jeder Verweis auf isTrue
im strikten Modus ein Fehler, da es noch nicht deklariert wurde.
Wenn Sie nur wissen wollen, ob eine Variable noch einen Wert hat, können Sie einfach tun:
if (typeof isTrue != "undefined") {
// whatever code here when it is defined
}
Oder, wenn Sie nur sicherstellen wollen, dass es einen Wert hat, wenn es nicht bereits initialisiert, können Sie dies tun:
if (typeof isTrue == "undefined") {
var isTrue = false;
}
Zwei Dinge, die Sie vielleicht prüfen wollen: 'Rückkehr typeof Fenster [Variable] ==‚undefined‘,' ist genug, und die effektive Unterzeichnung IsDefined ist 'IsDefined (string) ', was' isDefined ('isTrue') 'bedeutet, um das Verhalten zu erhalten, das Sie zu erwarten scheinen (' window [undefined] ',' window [true] ') und' win dow [false] 'ergibt keinen Sinn). – Bergius