[Core JS] 엄격 모드

✔️ 엄격 모드

자바스크립트는 기존에 작성한 코드는 절대 망가지지 않는다.

자바스크립트는 창작자의 실수나 불완전한 결정이 언어 안에 영원히 박제된다.

ECMAScript5(ES5)가 등장하기 전까지 지속됐지만 ES5에서는 새로운 기능이 추가되고 기존 기능 중 일부가 변경되었다. 하위 호환성 문제가 생길 수 있어 변경사항 대부분은 ES5의 기본 모드에선 활성화되지 않도록 설계되었다. 대신 use strict를 사용할 때 변경사항이 활성화되게 해놓았다.

 

✔️ use strict

"use strict", 'use strict'가 스크립트 최상단에 오면 스크립트 전체가 “모던한” 방식으로 동작한다.

"use strict"는 함수 본문 맨 앞에 올 수도 있으며 오직 해당 함수만 엄격 모드로 실행된다. 엄격 모드는 대개 스크립트 전체에 적용한다.

 

⚠️ "use strict"는 반드시 최상단에 위치시키기

더보기

"use strict"가 스크립트 최상단에 있지 않을 시, 엄격 모드가 활성화되지 않을 수 있다.

"use strict"의 위에는 주석만 사용할 수 있다.

alert("some code"); 
// 하단에 위치한 "use strict"는 스크립트 상단에 위치하지 않으므로 무시된다. 

"use strict"; 
// 엄격 모드가 활성화되지 않는다.

 

⚠️ use strict를 취소할 방법은 없다.

더보기

자바스크립트 엔진을 이전 방식으로 되돌리는 "no use strict"같은 지시자는 존재하지 않는다.

 

✔️ 브라우저 콘솔

개발한 기능을 테스트하기 위해 브라우저 콘솔을 사용하는 경우, 기본적으로 use strict가 적용되어있지 않다는 점에 주의해야 한다. use strict에 영향을 받는 경우라면 개발자는 기대하지 않았던 결과를 얻을 수 있기 때문이다. 콘솔에서 use strict를 사용하려면 'use strict’를 입력한 후, Shift+Enter를 눌러 줄 바꿈 해 원하는 스크립트를 입력하면 된다.

'use strict'; <Shift+Enter 를 눌러 줄 바꿈 함> 
// ...테스트하려는 코드 입력 
<Enter 를 눌러 실행>

브라우저가 오래 되어서 콘솔 창에 use strict를 입력하는 게 불가능하다면, 코드를 래퍼로 감싸면 된다.

(function() {
'use strict'; 

// ...테스트하려는 코드... 
})()

 

✔️ 'use strict’를 꼭 사용해야 할까?

모던 자바스크립트는 '클래스’와 '모듈’이라 불리는 진일보한 구조를 제공하며 use strict자동으로 적용된다.