# * 스트릭트 모드

Written by 📝 Tesilio

# 스트릭트 모드가 필요한 이유

ES5 문법에서는 암시적 전역변수(implicit global)라는 것이 생길 수 있다. 암시적 전역 변수는 여러 가지 골치 아픈 에러를 일으키곤 했다. 간단히 말해 var로 변수를 선언하는 것을 잊으면 자바스크립트는 전역 변수를 참조 하려 한다고 간주하고, 그런 전역 변수가 존재하지 않으면 스스로 만들었다.

이런 이유로 자바스크립트에서는 스트릭트 모드(strict mode)를 도입했다. 스트릭트 모드에서는 암시적 전역 변수를 허용하지 않는다. 스트릭트 모드를 사용하려면 문자열 'use strict' 하나만으로 이루어진 행을 코드 맨 앞에 쓰면 된다. 전역 스코프에서 'use strict'를 사용하면 스크립트 전체가 스트릭트 모드로 실행되고, 함수 안에서 'use strict'를 사용하면 해당 함수만 스트릭트 모드로 실행된다.

# 주의점

전역 스코프에 스트릭트 모드를 적용하면 스크립트 전체의 동작 방식이 바뀌므로 주의해야 한다. 최신 웹사이트는 대부분 다양한 스크립트를 불러와서 사용하므로 전역 스코프에서 스트릭트 모드를 사용하면 불러온 스크립트 전체에 스트릭트 모드가 강제된다. 모든 스크립트가 스트릭트 모드에서 정확히 동작한다면 멋진 일이겠지만 바리기 힘든 일이다. 따라서 일반적으로는 전역 스코프에서 스트릭트 모드를 사용하지 않는 편이 좋다. 작성하는 함수 하나하나마다 전부 'use strict'를 붙이고 싶은 사람은 없을 테니, 코드 전체를 즉시 실행되는 함수 하나로 감싸면 된다.

(() => {
  'use strict';

  // 코드를 전부 이 안에 작성한다.
  // 이 코드는 스트릭트 모드로 동작하지만,
  // 이 코드와 함께 동작하는 다른 스크립트는
  // 스트릭트 모드에 영향받지 않는다.
})();
1
2
3
4
5
6
7
8

스트릭트 모드는 대부분의 경우에 바람직하므로 스트릭트 모드를 권한다. 린트 프로그램을 사용한다면 스트릭트 모드가 막아주는 문제를 대부분 막아 주지만, 두 번 체크해서 나쁠 것은 전혀 없다.

Last Updated: 8/7/2019, 1:27:35 PM