본문 바로가기

Programming Language/JavaScript

[번역] 최신 모드, "use strict"

원글
The modern mode, "use strict"

 

오랫동안 자바스크립트는 호환성 문제 없이 진화했다.

이전 기능은 변경되지 않으면서 새로운 기능이 언어에 추가 되었다. 

 

이 사실은 기존에 작성한 코드가 절대 깨지지 않는다는 장점이 있었다.

하지만 단점은 자바스크립트의 제작자들이 한 실수나 불완전한 결정은 영원히 그 언어에 남게 된다는 것이다. 

 

2009년 ECMAScript 5(ES5)가 등장하기 전까지는 그랬다.

ES5는 언어에 새로운 기능을 추가했고 기존에 있던 몇 가지 기능들을 수정했다.

이전 코드가 계속 작동되도록 하기 위해 이러한 수정 내용은 기본적으로 해제되어 있다.

"use strict"라는 특별한 지시어로 명시적으로 활성화해야 한다. 

"use strict"

지시어는 문자열 형태이다: "use strict" 는 'use strict'.

코드 최상단에 해당 지시어를 작성하면, 코드 전체가 "최신" 방식으로 작동한다. 

 

"use strict";

/// 이 코드는 최신 방식으로 동작한다
...

 

"use strict"는 함수의 시작 부분에도 작성할 수 있다.

그렇게 하면 해당 함수에게만 strict mode가 적용된다.

하지만 대부분의 경우는 코드 최상단에 작성한다. 

 

⚠️  "use strict"는 최상단에 위치해야 한다

"use strict"가 코드의 최상단에 위치하지 않으면 strict mode가 활성화되지 않을 수 있다. 
alert("some code");
// 아래에 있는 "use strict"는 무시된다 - 코드의 최상단에 위치해야 한다

"use strict";

// strict mode가 활성화되지 않는다​

"use strict" 위에는 주석만 작성할 수 있다. 
⚠️  strict mode를 취소할 방법은 없다

엔진을 이전 동작 방식으로 되돌릴 수 있는 "no strict mode"와 같은 지시어는 없다.

한번 strict mode로 들어가면 뒤돌아 가는 방법은 없다. 

 

브라우저 콘솔

개발자 콘솔을 이용해서 코드를 실행할 때 기본적으로 strict mode를 사용하지 않는다는 점을 유의하자. 

strict mode 사용을 통해 동작 방식에 차이가 있을 경우 잘못된 결과를 얻을 수 있다. 

그럼 콘솔에서는 어떤 방법으로 strict mode를 사용할 수 있을까?

가장 먼저 use strict를 입력하고 Shift + Enter 키를 눌러서 코드 여러 줄을 입력하면 된다. 

'use strict'; <Shift + Enter for a newline>
// ...your code
<Enter to run>

FireFox와 Chrome 같은 대부분의 브라우저에서 동작한다. 

오랜된 브라우저와 같이 예상대로 동작하지 않는 브라우저가 있다면, 추하지만 strict mode를 보장하는 방법이 있다.

아래 방식처럼 코드를 감싸는 것이다:

(function() {
  'use strict';

  // ...your code here...
})()

"use strict"를 사용해야 할까?

뻔한 질문 같겠지만 그렇지 않다. 

누군가는 아주 간단하게 "use strict"를 모든 코드파일 최상단에 포함하면 되지 않을까 하고 추천할 수 있다.

하지만 현대의 JavaScript는 자동으로 strict mode를 사용하는 고급 언어 구조인 "클래스"와 "모듈"을 지원한다.

따라서 해당 구조들을 사용할 경우 "use strict" 지시어를 명시적으로 포함할 필요가 없어진다.