엄격한 JavaScript 모드를 여러 번 읽었으며 일부는 "진술을 비활성화"한다고 말합니다. 과거에는 말을 타고 꽃을 보면서이 모든 것을 보았고,이 진술을 정상적인 시간에 거의 사용하지 않기 때문에 나 자신과는별로 관련이 없기 때문입니다. 오늘은 "엄격한 모델"이 왜 진술을 견딜 수 없는지 궁금해 할 수는 없습니까?
ECMAScript 사양은 "with 문은 특정 객체에서 코드의 범위를 설정하는 데 사용됩니다"라고 말합니다. With 명령문이 스코프 체인을 변경한다는 것을 알 수 있습니다.
기능인 (이름, 연령, 섹스) {this.name = name; this.age = age = age; this.sex = sex;} (function () {var title = '신청자 :'; var zhangsan = new person ( 'zhang san', 20, 'male'); var str = '; 위치 '+job;} console.log (str);}) ();위의 코드는 끊임없는 참조 오류를보고합니다. 작업은 정의되지 않았습니다.
명령문 블록이있는 위의 위의가 변경된 경우
str = title+zhangsan.name+', age'+zhangsan.age+'age,'+zhangsan.sex+'sex'+', 위치'+zhangsan.job;
오류가 없습니다. 출력은 다음과 같습니다. 신청자 : Zhang San, 20 세, 남성, 정의되지 않은 위치
with 명령문 블록의 변수의 경우 실행할 때 해당 속성이 Zhangsan에 있는지 확인해야합니다.
스크립트를 실행할 때 먼저 컴파일 한 다음 실행 해야하는 두 가지 프로세스가 있다는 것을 알고 있습니다.
분명히, 컴파일 할 때,이 변수의 객체가 Zhangsan의 변수에 어떤 특성을 가지고 있는지 결정할 수 없습니다. Zhangsan은 처형 될 때 사람의 사례라고 결정할 수 있습니다. 따라서, with 명령문 블록의 변수가 편집 중에 이전 변수 스코프 체인의 변수 인 with 문의 변수가 사실 일 수는 없습니다.
이는 엄격한 모드를 컴파일 할 때 변수가 정의된다는 사실과 충돌하므로 엄격한 모드는 차이가 존재하지 않습니다. 따라서 Stith 명령문이 엄격한 모드에서 비활성화되어 있음을 이해하는 것은 어렵지 않습니다.