[모던 JavaScript 튜토리얼] 엄격 모드

모던 JavaScript 튜토리얼을 읽고 정리한 글입니다.

엄격 모드

ECMAScript5(ES5)가 등장하기 전인 2009년까지 JavaScript는 호환성 이슈 없이 발전해오면서 기존의 기능을 변경하지 않고 새로운 기능을 추가했었다. 그런데 새롭게 제정된 ES5에서는 기존 기능 중 일부가 변경되면서 하위 호환성 문제가 발생할 수 있게 됐다. 그래서 변경사항 대부분을 ES5의 기본 모드에선 활성화되지 않게 설계했다. 대신 use strict 지시자로 엄격 모드(strict mode)를 활성했을 때만 변경사항이 활성화되게 해놓았다.

use strict

단순한 문자열처럼 생긴 "use strict" 또는 'use strict'스크립트 최상단에 쓰면 스크립트 전체가 모던한 방식으로 동작한다. 보통 스크립트 전체에 적용하는 편이다. 스크립트 최상단에 쓰지 않으면 엄격 모드가 활성화되지 않을 수도 있다. "use strict" 위에는 주석만 사용할 수 있다.

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

"use strict";

// 엄격 모드가 활성화되지 않는다.

스크립트 최상단이 아닌 함수 본문 맨 앞에 올 수도 있는데, 이 경우 해당 함수만 엄격 모드로 실행된다.

⚠️ use strict를 취소하는 방법은 없다. JavaScript 엔진을 이전 방식으로 돌리는 "no use strict" 같은 지시자는 존재하지 않는다.

브라우저 콘솔

개발한 기능을 테스트하기 위해 브라우저 콘솔을 사용하는 경우 기본적으로 use strict가 적용되지 않는다! 그렇다면 어떻게 콘솔에서 use strict를 사용할 수 있을까? 'use strict'를 입력하고 Shift+Enter를 눌러 줄바꿈하여 원하는 스크립트를 입력하면 된다.

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

만약 오래된 브라우저에서 콘솔 창에 use strict를 입력하는 게 불가능하다면 아래와 같이 래퍼로 감싸면 된다.

(function() {
  'use strict';

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

‘use strict’를 꼭 사용해야 하나요

“당연히 사용해야 하는 거 아니야?”라고 생각할 수 있겠지만 꼭 그렇지만은 않다. 모던 JavaScript는 클래스와 모듈을 제공하는데, 이 둘을 사용하면 use strict가 자동으로 적용되기 때문에 스크립트에 "use strict"를 붙일 필요가 없다.

사실 엄격 모드와 비엄격 모드에서 차이를 보이는 기능이 많지 않다. 물론 엄격 모드를 사용하면 개발자의 삶의 질이 조금 더 높아지기는 한다 ✨

✔️ 본 튜토리얼의 모든 예시에는 엄격 모드를 적용할 예정이다.