20.1 strict mode란?

<aside> 💡 사용자의 오타나 실수를 예방하기 위해 javascript 언어의 문법을 엄격히 적용하게 해주는 것

</aside>

ES6에서 도입된 클래스와 모듈은 기본적으로 strict mode가 적용 된다.

20.2 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();

20.3 전역에 strict mode를 적용하는 것은 피하자

전역으로 strict mode를 설정할 경우 다른 서드파티 라이브러리에도 영향을 줄 수 있다.

전역으로 strict mode를 설정하는 것 보다 즉시 실행 함수로 감싸 스코프를 구분하는 것이 좋다.

(function () {
	'use strict';

	// Do something...
}());

20.4 함수 단위로 strict mode를 적용하는 것도 피하자

함수 단위에 strict mode가 설정되어 있을 경우 함수를 호출하는 외부 컨텍스트가 strict mode가 아니면 문제가 발생할 수 있다.

20.5 strict mode가 발생시키는 에러

  1. 암묵적 전역

    선언하지 않은 변수 참조 시 ReferenceError가 발생한다.

    (function () {
    	'use strict';
    
    	x = 1;
    	console.log(x); // ReferenceError: x is not defined
    }());
    
  2. 변수, 함수, 매게변수 삭제

    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.
    }());