본문 바로가기
JavaScript

strict mode

by 성건희 2021. 1. 22.
반응형
무제

스트릭트 모드 (엄격모드)

ECMAScript 5 에서는 '스트릭트 모드' 라는 개념을 도입했다.

스트릭트 모드는 기존과는 다른 방식으로 자바스크립트를 파싱하고 실행하라고 지시하는 것인데

ECMAScript 3판의 문제를 해결했으며 안전하지 않은 동작에는 에러를 반환한다. 라고 하는데,

다른 방식이라는게 뭘까?

검색해보니 '엄격하게 문법 검사를 하겠다' 라고 이해하면 될 듯 하다.

아래 예시를 보자.

a = 10;

JS 는 변수 선언 키워드 없이 위처럼 사용해도 에러가 안난다. (이것을 암시적 변수 선언이라고 함)

 

따라서 스트릭트 모드를 사용한다면 아래와 같이 선언을 강제한다.

var a = 10;

 

전체 스크립트에 스트릭트 모드를 적용하려면 스크립트 맨 위에 다음을 추가하면 된다. (권장하는 방법은 아님)

"use strict";

 

함수 하나에 스트릭트 모드를 적용하려면 다음과 같이 추가하면 된다.

function play() {
  "use strict";
  ...
}

단 위 방법은 모든 함수에 일일히 strict mode를 적용해야 하므로 번거롭다.

또한 strict mode 가 적용된 함수가 참조할 함수 외부의 컨텍스트에 strict mode를 적용하지 않는다면 문제가 발생할 수 있다.

그렇기 때문에 strict mode 는 즉시실행함수로 감싼 스트립트 단위로 적용하는 것이 좋다.

(function () {
  'use strict';
  ...
}());

 

스트릭트 모드의 장점

  • 코드의 문제를 더 빨리 파악할 수 있어 디버깅이 쉬워진다.
  • 선언되지 않은 변수에 값 할당시 해당 이름의 전역 변수가 자동으로 생성되는걸 막아준다 (우발적인 global 방지)
  • this를 null 또는 undefined 값으로 참조하면 오류를 발생시킨다.
  • 중복 매개변수를 허용하지 않는다.

 

그럼 스트릭트 모드를 사용하는게 좋겠네?

개발자의 에러 발생을 줄여주니 스트릭트 모드를 사용하는게 좋아보인다.

요즘에는 ESLint 와 같은 도구를 이용하면 스트릭트 모드와 유사한 효과를 얻을 수 있다.

또한 스트릭트 모드가 제한하는 오류는 물론 코딩 컨벤션을 설정 파일 형태로 정의하고 강제할 수 있는 등 다양한 것들을 추가 지원하므로

린트 도구를 사용하는게 좀 더 좋아보인다.

 

참고 ) 최신 웹사이트의 경우 다양한 스크립트를 불러와서 사용하므로, 전역 스코프에서 스트릭트 모드를 사용하면 호환성 문제가 있을 수 있다.

따라서 전역 스코프에서 스트릭트 모드 사용은 지양해야한다.

 

브라우저 호환성

IE 9 이하는 지원하지 않는다.

 

참고

 

반응형

'JavaScript' 카테고리의 다른 글

천 단위 콤마(,) 찍기 꿀팁  (0) 2021.01.29
조금 이상한 함수 매개변수  (0) 2021.01.22

댓글