암묵적 전역
- 변수 선언이 이루어지지 않아도 에러를 내지 않고 암묵적으로 자스 엔진이 전역 객체에 x 프로퍼티를 동적으로 생성하는 것.
➡️ 오류를 발생시키는 원인이 될 수 있으므로 키워드로 변수 선언하는 것이 바람직하다.
➡️ 이에 대한 보다 근본적인 해결책으로 ES5부터 strict mode
가 추가 되었다.
자바스크립트 문법을 보다 엄격하게 적용해서 명시적인 에러를 발생시킨다.
➡️ ESLint 같은 린트 도구로도 비슷한 효과를 볼 수 있다. 린트 도구는 더 강력한 효과를 얻을 수 있다.(코딩 컨벤션까지 적용 가능하므로)
strict mode 사용하기
- 전역 혹은 함수 몸체 앞쪽에
'use strict';
를 추가하면 적용된다.
- 전역에 추가 : 스크립트 단위로 적용 => 비추천(여러 스크립트가 쓰이고 있을 때 strict mode, non-strict mode 혼용으로 오류 발생 가능)
- 함수 몸체 앞 : 해당 함수 및 중첩 함수에 적용 => 같은 맥락에서 함수 단위 적용도 비추천
➡️ strict mode는 즉시 실행함수로 감싼 스크립트 단위로 적용하는 것을 권장
strict mode 에러 종료
ReferenceError
: 암묵적 전역 관련 에러(선언하지 않은 변수 참조)
SyntaxError
- delete 연산자로 변수, 함수, 매개변수 삭제 시
- 중복된 매개변수 이름 사용
- with 문 사용
strict mode 특징
- 일반함수의 this가 undefined로 바인딩된다.(에러는 X)
- 매개변수에 전달된 이수를 재할당해서 변경해도 arguments 객체에 반영되지 않는다.