본문 바로가기

TIL

<자바스크립트 Javascript> 안정적인 개발환경을 위한 Strict mode

- Strict mode란?

선언하지 않은 변수에 값을 할당하고 실행하면, 자바스크립트 엔진은 스코프 체인을 통해 이를 찾아본 후 에러를 발생시키는 것이 아니라 전역 변수를 생성한다. 이를 암묵적 전역 변수(implicit global)이라 한다. 다만, 이러한 암묵적 전역 변수는 추후 오류를 발생시키는 원인이 될 수 있으므로 반드시 변수 키워드를 사용하여 변수를 선언한 다음에 변수를 사용하는 것이 좋다. 하지만 그럼에도 오타나 문법 지식의 미비 등의 이유로 실수는 언제나 일어날 수 있다. 따라서 이러한 잠재적인 오류 자체를 일어나기 어렵도록 개발 환경을 만들고 그 환경에서 개발을 하는 것을 근본적인 해결책이라 할 수 있겠다.

 

이러한 맥락에서 ES5부터 strict mode가 추가되었다. 즉, strict mode는 자바스크립트 언어의 문법을 엄격히 적용하여 기존에 무시되던 오류를 발생시킬 가능성이 높거나, 자바스크립트 엔진의 최적화 작업 시 문제가 될 수 있는 코드에 대해 에러를 발생키는 것이다. ESLint와 같은 린트 도구도 이와 비슷한 기능을 하는 도구이다. strict mode는 IE 10 이상부터 사용가능하다.

 

 

- Strict mode의 적용

strict mode를 적용하기 위해서는 전역의 선두 혹은 함수 몸체의 선두에 'use strict'; 를 추가하면 된다. 각각 스크립트 전체에, 함수 및 중첩된 내부 함수에 strict mode를 적용시킨다.

 

다만, 전역에 strict mode를 사용하는 것은, 외부 서드 파티 라이브러리를 사용할 때에 해당 라이브러리가 non-strict mode일 수 있기 때문에 혼용에 의한 오류 발생 가능성이 있어 권장되지 않는다. 따라서 즉시 실행 함수로 스크립트 전체를 감싸 스코프를 구분하고, 선두에 strict mode를 적용하는 방법을 사용하는 것이 좋다.

 

함수 단위의 strict mode를 사용하는 것도 권장되지 않는다. 함수마다 strict mode를 설정해주어야 하며, 함수에 따라 strict mode 여부가 다르다면 이 또한 문제가 되기 때문이다. 따라서 앞서 언급한 것처럼 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 방법이 권장된다.

 

 

- Strict mode가 발생시키는 에러의 종류

1) 암묵적 전역 변수

선언하지 않는 변수를 참조할 때에 발생한다. ReferenceError를 반환한다.

 

2) 변수, 함수, 매개변수의 삭제

SyntaxError를 반환한다.

 

3) 매개변수 이름의 중복

중복된 함수 파라미터 이름을 사용하는 경우 발생한다. SyntaxError를 반환한다.

 

4) with 문의 사용

SyntaxError를 반환한다.

 

5) 일반 함수의 this

strict mode에서 함수를 일반 함수로 호출할 경우, 에러는 발생되지 않고 this에는 undefined가 바인딩된다.

 

 

 

 

 

참고 : poiemaweb 웹사이트