1. strict mode란

자바스크립트란 암묵적 전역(implicit global)을 발생시킨다.

전역 스코프까지 갔는데 변수의 선언이 존재하지 않으면 암묵적으로 전역 객체에 변수 프로퍼티를 동적 생성하는 것이다.

그런데 개발자의 의도와 상관없이 발생한 암묵적 전역은 오류를 발생시킨다.

그래서 요런 오류 발생을 막기 위해 ES5부터 strict mode가 추가되었다.

비슷하게 ESLint를 사용해도 정적 분석 기능을 통해 코드 실행 전에 코드를 스캔해서 오류를 잡아주기도 한다.

2. strict mode 적용

strict mode를 적용하려면 전역 선두에 ‘use strict’; 를 추가해야 한다.

함수 몸체의 선두에 추가하면 해당 함수와 중첩 함수에 strict mode가 적용된다.

2-1. 그런데 전역에 strict mode를 적용하는 것은 피해야 한다.

외부 라이브러리를 사용하는 경우, 외부 라이브러리는 Non-strict mode인 경우도 있기 때문이다. (라이브러리가 안 돌아갈 수도 있음)

<aside> 😓

“이런 경우에는 즉시 실행 함수로 스크립트 전체를 감싸서 스코프를 구분하고 즉시 실행 함수의 선두에 strict mode를 적용해야 한다.”

이게 무슨 말이야…

**즉시 실햄 함수(Immediately Invoked Function Expression, IIFE)**를 쓰면, 내 코드만 strict 모드로 돌리고 외부 라이브러리에는 영향을 주지 않음

(function () {
  'use strict';
  // 이 함수 내부만 strict mode 적용!
  // 내 코드만 안전하게!
  
  // 여기에 내 코드 작성
})();

</aside>

<aside> 😓

즉시 실행 함수(IIFE)

즉시 실행 함수를 쓰는 이유는?

  1. 변수 스코프 제한: 전역 스코프의 오염을 방지한다.
  2. 비공개 데이터: 외부에서 접근할 수 없는 private한 변수와 메서드를 만들 수 있다.
  3. 모듈화: 독립적인 기능 단위를 만들 수 있다.
  4. 초기화 코드: 애플리케이션 시작 시 한 번만 실행되어야 하는 코드를 관리할 수 있다.

함수 표현식, 화살표 함수 IIFE 비교해보기

https://velog.io/@micaelknife/JavaScript-즉시실행함수IIFE-완벽-가이드-주니어-개발자를-위한-상세-설명

</aside>