ES5 문법에서는 암시적 전역 변수(implicit global) 라는 것이 생길 수 있었습니다.
암시적 전역 변수는 여러 가지 골치 아픈 에러를 일으키곤 했습니다.
간단히 말해 var로 변수를 선언하는 것을 잊으면 자바스크립트는 전역 변수를 참조하려 한다고 간주하고, 그런 전역 변수가 존재하지 않으면 스스로 만들었습니다.
수많은 문제가 발생할 것은 불 보듯 뻔한 일입니다.
이런 이유로 자바스크립트에서는 스트릭트 모드(strict mode) 를 도입했습니다.
스트릭트 모드에서는 암시적 전역 변수를 허용하지 않습니다.
스트릭트 모드를 사용하려면 문자열 “use strict”(작은 따옴표를 써도 됩니다) 하나만으로 이루어진 행을 코드 맨 앞에 쓰면 됩니다.
전역 스코프에서 “use strict”를 사용하면 스크립트 전체가 스트릭트 모드로 실행되고, 함수 안에서 “use strict”를 사용하면 해당 함수만 스트릭트 모드로 실행됩니다.
전역 스코프에 스트릭트 모드를 적용하면 스크립트 전체의 동작 방식이 바뀌므로 주의해야합니다.
최신 웹사이트는 대부분 다양한 스크립트를 불러와서 사용하므로 전역 스코프에서 스트릭트 모드를 사용하면 불러온 스크립트 전체에 스트릭트 모드가 강제됩니다.
모든 스크립트가 스트릭트 모드에서 정확히 동작한다면 멋진 일이겠지만 바라기 힘든 일입니다.
따라서 일반적으로는 전역 스코프에서 스트릭트 모드를 사용하지 않는 편이 좋습니다.
작성하는 함수 하나하나마다 전부 “use strict”를 붙이고 싶은 사람은 없을 테니, 코드 전체를 즉시 실행되는 함수 하나로 감싸면 됩니다.
이에 관해서는 13장에서 다시 설명할 겁니다.
(function () {
'use strict';
// 코드를 전부 이 안에 작성합니다.
// 이 코드는 스트릭트 모드로 동작하지만,
// 이 코드와 함께 동작하는 다른 스크립트는
// 스트릭트 모드에 영향받지 않습니다.
})()
스트릭트 모드는 대부분의 경우에 바람직하므로 필자는 스트릭트 모드를 권합니다.
린트 프로그램을 사용한다면 스트릭트 모드가 막아주는 문제를 대부분 막아주지만, 두 번 체크해서 나쁠 것은 전혀 없습니다.
스트릭트 모드에 대해 더 자세히 알고 싶다면 MDN 문서를 보십시오.