엄격 모드는 ECMAScript 5의 새로운 기능으로, 전체 프로그램이나 특정 기능을 "엄격한" 운영 컨텍스트에 배치할 수 있습니다. 이러한 엄격한 컨텍스트는 특정 작업을 방지하고 더 많은 예외를 발생시킵니다.
ECMAScript 5는 ECMAScript 3과 역호환되지만 엄격 모드에서는 ECMAScript 3에서 더 이상 사용되지 않는 모든 기능이 호환되지 않고 비활성화되거나 오류가 발생합니다.
엄격 모드를 활성화하면 다음과 같은 이점이 있습니다.
1. 일부 프로그래밍 오류를 포착하고 예외를 발생시킵니다.
2. 상대적으로 "안전하지 않은" 작업(예: 전역 변수 액세스)을 방지하고 예외를 발생시킵니다.
3. 혼란스러운 일부 기능을 비활성화합니다.
엄격 모드에 대한 대부분의 정보는 ES5 사양[PDF]의 223페이지에서 확인할 수 있습니다.
(참고: ECMAScript 5의 엄격 모드는 Firefox의 엄격 모드와 다릅니다)
엄격 모드 활성화 방법
전체 스크립트에 대해 엄격 모드를 활성화하려면 프로그램 시작 부분에 다음 문을 추가하세요.
함수 내에서 엄격 모드를 활성화하는 실제 적용은 외부 코드에 영향을 주지 않도록 전체 Javascript 클래스 라이브러리를 엄격 모드 함수 내에서 정의하는 것입니다.
(함수(){
"엄격한 사용";
// 라이브러리를 엄격하게 정의하세요...
})();
// 엄격하지 않은 코드...
변수 및 속성
변수를 전역 변수로 만드는 대신 정의되지 않은 변수에 대한 할당이 실패합니다.
쓰기 가능 속성이 false인 속성을 쓰거나, 구성 가능한 속성이 false인 속성을 삭제하거나, false 속성이 있는 확장 가능 속성을 추가하면 오류가 발생합니다(이러한 속성은 사전에 동의되어 있습니다). 과거에는 이러한 작업이 예외를 발생시키지 않고 조용히 실패했습니다.
변수, 함수 또는 함수 매개변수에 대해 삭제 작업을 수행하면 오류가 발생합니다.
foo 삭제 // 오류
테스트 삭제; // 오류
함수 테스트2(arg) {
인수 삭제; // 오류
}
평가
"eval"이라는 이름의 사용은 금지됩니다(주요 의도는 eval 함수가 변수나 객체 속성을 가리키는 것입니다).
기능
인수 개체를 재정의하면 오류가 발생합니다.
with() { } 문은 엄격 모드에서 완전히 손상되었습니다.