<aside> 💡 사용자의 오타나 실수를 예방하기 위해 javascript 언어의 문법을 엄격히 적용하게 해주는 것
</aside>
ES6에서 도입된 클래스와 모듈은 기본적으로 strict mode가 적용 된다.
전역 혹은 함수 몸체 선두에 'use strict';
를 추가하여 사용한다.
// 전역 설정
'use stcit';
function foo() {
x = 10; // ReferenceError: x is not defined
}
foo();
function foo() {
// 함수 몸체 선언
'use strict';
x = 10; // ReferenceError: x is not defined
}
foo();
전역으로 strict mode를 설정할 경우 다른 서드파티 라이브러리에도 영향을 줄 수 있다.
전역으로 strict mode를 설정하는 것 보다 즉시 실행 함수로 감싸 스코프를 구분하는 것이 좋다.
(function () {
'use strict';
// Do something...
}());
함수 단위에 strict mode가 설정되어 있을 경우 함수를 호출하는 외부 컨텍스트가 strict mode가 아니면 문제가 발생할 수 있다.
암묵적 전역
선언하지 않은 변수 참조 시 ReferenceError가 발생한다.
(function () {
'use strict';
x = 1;
console.log(x); // ReferenceError: x is not defined
}());
변수, 함수, 매게변수 삭제
delete 연산자로 변수, 함수, 매개변수 삭제하면 SyntaxError가 발생한다.
(function () {
'use strict';
var x = 1;
delete x; // SyntaxError: Delete of an unqualified indentifier in strict mode.
function foo(a) {
delete a; // SyntaxError: Delete of an unqualified indentifier in strict mode.
}
delete foo; // SyntaxError: Delete of an unqualified indentifier in strict mode.
}());