암묵적 전역
: 자바스크립트 엔진은 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성하는 것
-> 암묵적 전역은 오류를 발생시킬 수 있는 원인이 될 가능성 있음
잠재적인 오류를 발생시키기 어려운 개발 환경을 만들고, 그 환경에서 개발하는 것이 좀 더 근본적인 해결책임
-> ES5부터 strict mode(엄격 모드)
가 추가
=> 자바스크립트 언어의 문법을 좀 더 엄격히 적용하여 오류를 발생시킬 가능성이 높거나 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생
(-> ESLint와 같은 린트 도구 사용도 가능)
use strict;
추가즉시 실행 함수의 선두에 strict mode를 적용
하기즉시 실행 함수로 감싼 스크립트 단위로 적용
하는 것이 바람직함선언하지 않은 변수를 참조하면 ReferenceError가 발생
(function foo() {
'use strict';
x = 1;
console.log(x); // ReferenceError: x is not defined
}());
delete 연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError 발생
(function () {
'use strict' ;
var x = 1;
delete x; // SyntaxError: Delete of an unqualified \
}());
중복된 매개변수 이름을 사용하면 SyntaxError 발생
(function () {
'use strict ' ;
// SyntaxError: Dul끄icate parameter name not allowed in this context
function foo(x, x) {
return x + x;
}
console.log(foo(1, 2));
}());
(function() {
'use strict';
// SyntaxError: strict mode not include a with statement
with({x :1 }) {
console.log(x);
}
}());
생성자 함수가 아닌 일반 함수 내부에서는 this를 사용할 필요가 없기 때문 (에러 발생 X)
strict mode에서는 매개 변수에 전달된 인수를 재할당하여 변경해도 arguments 객체에 반영되지 않음