strict mode란?
function foo() {
x = 10;
}
foo();
console.log(x);
- 선언되지 않은 x는, 자바스크립트 엔진이 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성한다.
- 이러한 현상을
암묵적 전역(implicit global)
이라 한다 -> 오류를 발생시키는 원인이 될 수 있음
- 따라서, 반드시 var, let, const 키워드를 사용하여 변수를 선언한 다음에 사용해야 한다.
ES5부터 이러한 오류를 줄여 안정적인 코드를 생산하기 위해, 오류를 발생시키기 어려운 개발 환경을 만들기로 한다. => strict mode (엄격 모드) 추가됨
- 자바스크립트 문법을 더 엄격히 적용해 오류를 발생시킬 가능성이 높거나 최적화 작업에 문제를 일으킬 수 있는 코드에 명시적인 에러를 발생시킨다.
전역의 선두
또는 함수 몸체의 선두
에 추가한다.
`use strict`
function foo() {
x = 10;
}
foo();
1. 전역에 strict mode를 적용하는 것은 피하자
- 전역에 적용한 strict mode는 스크립트 단위로 적용된다.
- 즉, 스크립트 단위로 적용된 엄격 모드는 다른 스크립트에 영향을 주지 않는다.
- 그러나 strict mode와 non-strict mode 스크립트를 혼용하는 것은 오류가 발생할 수 있기 때문에 전역에 strict mode를 사용하지 말 것.
2. 함수 단위로 strict mode를 적용하는 것은 피하자
- strict mode 는 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 바람직하다.
strict mode 가 발생시키는 에러
- 암묵적 전역 ->
ReferenceError
- 변수, 함수, 매개변수의 삭제 ->
SyntaxError
- 매개변수 이름의 중복 ->
SyntaxError
- with 문의 사용 ->
SyntaxError