엄격 모드


ECMAScript5(ES5)가 등장하기 전인 2009년까지는 브라우저 호환성 이슈 없이 발전해왔다. 하지만, 새롭게 제정된 ES5에서는 새로운 기능이 추가되고 기존 기능 중 일부가 변경되었다. 기존 기능을 변경하였기 때문에 하위 호환성 문제가 생겼으며 그래서 변경사항 대부분은 ES5의 기본 모드에선 활성화되지 않도록 설계되었다. 대신 use strict라는 특별한 지시자를 사용해 엄격 모드(strict mode)를 활성화 했을 때만 이 변경사항이 활성화되게 해놓았다.

use strict

  • 'use strict', 혹은 'use strict'는 단순한 문자열처럼 생겼다.
  • 하지만, 이 지시사가 스크립트 최상단에 오게되면 스크립트 전체가 "모던한" 방식으로 동작한다.

예시 :

'use strict';

// 이 코드는 모던한 방식으로 실행됩니다.
...


'use strict'는 반드시 최상단에 위치 시켜야 한다.

  • 'use strict'는 스크립트 최상단에 있어야 한다. 그렇지 않으면 엄격 모드가 활성화되지 않을 수 있다.
x = 123; // 하단에 위치한 "use strict"는 스크립트 상단에 위치하지 않으므로 무시된다.
'use strict';
'use strict';
x = 123; // Uncaught ReferenceError: x is not defined


엄격모드 확인 방법

  • 변수 선언 및 정의시 기본적인 변수 초기화 반환값인 undefined 대신 다른 값을 반환한다.
  • 크롬 개발자 도구 콘솔에서 확인해보면 'use strict'를 반환하는 것을 확인할 수 있다.
let test;

// undefined
'use strict';

let test;

//'use strict'


엄격모드를 취소할 수 없다.

  • 한번 엄격 모드가 적용되면 돌이킬 수 있는 방법은 없다.


엄격모드를 사용하면 얻는 이점

  • 엄격모드를 사용하면 기존에 무시됐던 에러들이 throw된다.
  • 자바스크립트 엔진 최적화 작업을 어렵게 만들었던 실수들을 바로잡아준다.
  • 엄격 모드에서는 ECMAScript의 차기 버전들에서 정의 될 문법들을 금지시켜준다.


'use strict'를 꼭 사용해야 하는가?

결론부터 말하면 꼭 사용해야 되는건 아니다.

그 이유는 모던 자바스크립트는 클래스모듈 이라는 진일보한 구조를 제공한다. 이 둘을 사용하면 'use strict'가 자동으로 적용된다. 따라서 이 둘을 코드상에서 사용하고 있다면 스크립트에 'use strict'를 붙일 필요가 없다.

results matching ""

    No results matching ""