20.1. strict mode 란
- 암묵적 전역: 선언되지 않은 변수를 사용할 경우 자바스크립트 엔진에서 동적으로 전역 객채로 생성함
- strict mode (엄격 모드) : 이러한 에러 발생 등을 보완하기 위해 ES5부터 도입
- ESLint 정적 분석 도구
- 소스코드를 실행하기 전에 스캔하여 문법적, 잠재적 오류까지 찾아내고 리포팅해주는 도구
- strict mode 와 동일한 기능
- 일반적으로 사용 권장
20.2. strict mode 적용
- 전역의 선두 또는 함수 몸체의 선두에 'use strict'; 선언
- 코드의 선두에 위치하지 않으면 제대로 동작하지 않음
20.3. 전역 지양
- 전역에 선언한 엄격 모드는 스크립트 단위로 적용됨
- 다른 스크립트에는 영향을 주지 않음
- 혼용하는 경우 오류를 발생시킬 위험이 커짐
- 즉시 실행 함수로 스크립트 전체를 감싸서 스코프를 구분하고 선두에 strict mode 적용
20.4. 함수 단위 지양
- 모든 함수에 일일이 적용하기엔 번거롭게 누락될 확률이 높음
- 즉시 실행 함수로 감싼 스크립트 단위로 적용 권장
20.5. strict mode가 발생시키는 에러
20.5.1. 암묵적 전역
- 선언하지 않은 변수 참조 시 ReferenctError 발생
20.5.2. 변수, 함수, 매개변수의 삭제
- delete 연산자로 변수, 함수, 매개변수 삭제 시 SyntaxError 발생
20.5.3. 매개변수 이름의 중복
- 중복 매개변수 이름 사용 시 SyntaxError 발생
20.5.4. with 문의 사용
- with 문 사용 시 SyntaxError
- with 문은 전달된 객체를 스코프 체인에 추가하므로 성능과 가독성에 좋지 않으므로 지양
20.6. strict mode 적용에 의한 변화
20.6.1. 일반 함수의 this
- 함수를 일반 함수로 호출하면 this에 undefined 바인딩
- 에러 발생하지 않음
(function () {
'use strict';
function foo () {
console.log(this);
}
foo();
function Foo () {
console.log(this);
}
new Foo();
}());
20.6.2. arguments 객체
- 매개변수에 전달된 인수를 재할당하여 변경해도 arguments 객체에 반영되지 않음
[출처] 모던 자바스크립트, Deep Dive