Ich habe den strengen JavaScript -Modus viele Male gelesen und einige sagen "Deaktivieren mit Aussagen". In der Vergangenheit habe ich das alles gesehen, indem ich ein Pferd gefahren und Blumen beobachtete, und ging vorbei, weil ich diese Aussage in normalen Zeiten selten benutze, sodass es nicht viel mit mir selbst zu tun hat. Heute kann ich mich nicht anders, als mich zu fragen, warum das "strenge Modell" die mit Aussage nicht tolerieren kann?
In der ECMascript -Spezifikation heißt es, dass "die With -Anweisung verwendet wird, um den Umfang des Codes in einem bestimmten Objekt festzulegen". Es ist ersichtlich, dass die With -Anweisung die Bereichskette ändert.
Funktionsperson (Name, Alter, Geschlecht) {this.name = name; this.age = Alter; this.sex = sex;} (function () {var title = 'Bewerber:'; var zhangsan = new Person ('Zhang san', 20, 'männlich'); var str = ''; mit (ZhangSan) {str = title+name+name+name+', älter' älter 'älter' älter 'älter' älter ’ Position '+Job;} console.log (str);}) ();Der oben genannte Code meldet einen unbekannten ReferenzError: Hiob ist nicht definiert.
Wenn das obige mit Anweisungsblock in geändert wird in
Str = Titel+Zhangsan.name+', Alter'+Zhangsan.age+'Jahre'+Zhangsan.sex+'Sex'+', Position'+Zhangsan.job;
Es gibt keinen Fehler, die Ausgabe ist: Antragsteller: Zhang San, 20 Jahre alt, männlich, undefinierte Position
Bei Variablen im With -Anweisungsblock müssen Sie bei der Ausführung überprüfen, ob sich ihre Eigenschaften in Zhangsan befinden.
Wir wissen, dass beim Ausführen eines Skripts zwei Prozesse erforderlich sind, die zuerst kompilieren und dann ausführen.
Offensichtlich ist es beim Kompilieren nicht möglich zu bestimmen, welche Eigenschaften das von dieser Variablen von Zhangsan dargelegte Objekt hat. Es kann nur festgestellt werden, dass Zhangsan bei der Ausführung eine Instanz der Person ist. Daher kann es nicht wahr sein, dass die Variable im With -Anweisung -Block eine Eigenschaft von Zhangsan oder eine Variable in der vorherigen variablen Bereichskette während der Zusammenstellung ist.
Dies widerspricht der Tatsache, dass die Variable beim Kompilieren des strengen Modus definiert wird, sodass der strenge Modus nicht zulässt, dass der Unterschied existiert. Daher ist es nicht schwer zu verstehen, dass die With -Anweisung im strengen Modus deaktiviert ist.