자바스크립트란 암묵적 전역(implicit global)을 발생시킨다.
전역 스코프까지 갔는데 변수의 선언이 존재하지 않으면 암묵적으로 전역 객체에 변수 프로퍼티를 동적 생성하는 것이다.
그런데 개발자의 의도와 상관없이 발생한 암묵적 전역은 오류를 발생시킨다.
그래서 요런 오류 발생을 막기 위해 ES5부터 strict mode가 추가되었다.
비슷하게 ESLint를 사용해도 정적 분석 기능을 통해 코드 실행 전에 코드를 스캔해서 오류를 잡아주기도 한다.
strict mode를 적용하려면 전역 선두에 ‘use strict’; 를 추가해야 한다.
함수 몸체의 선두에 추가하면 해당 함수와 중첩 함수에 strict mode가 적용된다.
외부 라이브러리를 사용하는 경우, 외부 라이브러리는 Non-strict mode인 경우도 있기 때문이다. (라이브러리가 안 돌아갈 수도 있음)
<aside> 😓
“이런 경우에는 즉시 실행 함수로 스크립트 전체를 감싸서 스코프를 구분하고 즉시 실행 함수의 선두에 strict mode를 적용해야 한다.”
이게 무슨 말이야…
**즉시 실햄 함수(Immediately Invoked Function Expression, IIFE)**를 쓰면, 내 코드만 strict 모드로 돌리고 외부 라이브러리에는 영향을 주지 않음
(function () {
'use strict';
// 이 함수 내부만 strict mode 적용!
// 내 코드만 안전하게!
// 여기에 내 코드 작성
})();
</aside>
<aside> 😓
즉시 실행 함수(IIFE)
즉시 실행 함수를 쓰는 이유는?
함수 표현식, 화살표 함수 IIFE 비교해보기
https://velog.io/@micaelknife/JavaScript-즉시실행함수IIFE-완벽-가이드-주니어-개발자를-위한-상세-설명
</aside>