Heim  >  Artikel  >  Web-Frontend  >  Warum der strikte JavaScript-Modus die With-Anweisung deaktiviert

Warum der strikte JavaScript-Modus die With-Anweisung deaktiviert

巴扎黑
巴扎黑Original
2017-09-19 11:32:481670Durchsuche

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn