20. Strict mode
- 잠재적인 오류를 발생시키기 어려운 개발 환경을 만들고 그 환경에서 개발하는 것이 좀 더 근본적인 해결책이다.
- ES5부터 strict mode가 추가됐다.
- ESLink 같은 린트 도구를 활용해 동일한 효과를 얻을 수 있다.
- ES6에서 도입된 클래스와 모듈은 기본적으로 strict mode가 적용된다.
🔖암묵적 전역 : 선언하지 않은 식별자에 값을 할당, 전역 객체의 프로퍼티가 됨
strict mode의 적용
- 함수 몸체 선두에
'use strict';
를 추가한다.
- strict mode와 non-strict 스크립트를 혼용하는 것은 오류를 발생시킬 수 있다. ⇒ 즉시 실행 함수로 스크립트 전체를 감싸서 스코프를 구분하고 즉시 실행 함수의 선두에 strict mode를 적용한다.
- 함수 단위로 strict mode를 적용하는 것을 피하자
(function () {
'use strict';
}());
strict mode가 발생시키는 에러
- 암묵적 전역 :
ReferenceError
가 발생한다.
delete
연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError
가 발생한다.
- 중복된 매개변수 이름을 사용하면
SyntaxError
가 발생한다.
with
문을 사용하면 SyntaxError
가 발생한다.
strict mode 적용에 의한 변화
일반 함수의 this
함수를 일반 함수로서 호출하면 this에 undefined가 바인딩된다. 에러는 발생하지 않는다.
argumenyts의 객체
매개변수에 전달된 인수를 재할당하여 변경해도 arguments 객체에 반영되지 않는다.
📄Strict mode 정리
- 엄격하게 코드 사용 규칙을 제한하고, 잠재적으로 오류가 발생할 수 있는 전역 변수 사용을 제한하기 때문에 더 좋은 코드를 작성하는데 도움을 준다.
- 클래스와 모듈은 기본적으로 strict mode가 적용된다.
- 미래 ECMAScript의 진화에 대비한다.
- 이미 작성해서 사용하고 있는 자바스크립트 파일에는 예상치 못한 오류를 발생시킬 수 있기에 Strict mode 전환을 피해야 한다.
- 새로 자바스크립트 파일을 만드는 시점에는 사용하는 것을 권장한다!!