Ich habe den strikten Modus von JavaScript viele Male gelesen und einer von ihnen sagte: „Deaktivieren Sie die With-Anweisung“. Kann mal einen Blick darauf werfen
Ich habe den strikten JavaScript-Modus schon oft gelesen, und einer von ihnen sagt: „Deaktivieren Sie die With-Anweisung. Ich habe das schon einmal nebenbei gesehen, weil diese Anweisung selten verwendet wird, also habe ich Ich kann nicht anders, als es zu deaktivieren. Heute frage ich mich, warum der „strikte Modus“ die with-Anweisung nicht berücksichtigen kann.
Die EcmaScript-Spezifikation besagt, 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.
function Person(name,age,sex){ this.name = name; this.age = age; this.sex = sex; } (function(){ var title = '申请人:'; var zhangsan = new Person('张三',20,'男'); var str = ''; with(zhangsan){ str = title+name+',年龄'+age+'岁,'+sex+'性'+',职位'+job; } console.log(str); })();
Der obige Code meldet „Uncaught ReferenceError: Job is not Defined“.
Wenn Sie den obigen Block mit der Anweisung in
str = title+zhangsan.name+', age'+zhangsan.age+'years old,'+zhangsan.sex+'sex'+' ändern , Position'+zhangsan.job;
meldet keinen Fehler und die Ausgabestr lautet: Bewerber: Zhang San, Alter 20, männlich, Position undefiniert
Für die Variablen im with Anweisungsblock, Überprüfen Sie beim Ausführen, ob sich seine Attribute in Zhangsan befinden.
Wir wissen, dass beim Ausführen eines Skripts zwei Prozesse erforderlich sind: zuerst die Kompilierung und dann die Ausführung.
Offensichtlich ist es während der Kompilierung nicht möglich zu bestimmen, welche Attribute das durch die Variable zhangsan dargestellte Objekt hat. Es kann nur zum Zeitpunkt der Ausführung festgestellt werden, dass Zhangsan eine Instanz von Person ist. Daher ist es zur Kompilierungszeit nicht möglich, zu bestätigen, ob die Variable im with-Anweisungsblock ein Attribut von zhangsan oder eine Variable in der Variablenbereichskette der oberen Ebene ist.
Dies steht im Konflikt mit dem strikten Modus, der prüft, ob Variablen zur Kompilierungszeit definiert sind. Daher lässt der strikte Modus keine Unterschiede zu, sodass es nicht schwer zu verstehen ist, dass der strikte Modus die With-Anweisung deaktiviert.
Das obige ist der detaillierte Inhalt vonWarum der strikte JavaScript-Modus die With-Anweisung deaktiviert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!