자바스크립트에서의 strict mode

Javascript

strict mode

function foo(){
    x=10;
}
foo();
console.log(x);

자바스크립트 엔진은 x 변수가 어디에서 선언되었는지 스코프 체인을 통해 검색하기 시작한다. 하지만 foo에서 x는 선언되어 있지 않으니 상위 스코프에서 x 변수의 선언을 검색한다. 전역 스코프에서도 x의 선언을 찾을 수 없으니 참조에러를 발생시킬 것 같지만 암묵적으로 전역 객체에 x 프로퍼티를 동적 생성한다. 이를 암묵적 전역이라고 한다. 이는 오류를 발생시키는 원인이 되므로 항상 키워드를 사용하여 변수를 선언한 다음 사용해야 한다.

사람은 항상 실수를 하기에 잠재적인 오류를 발생시키기 어려운 개발 환경을 만들고 그 환경에서 개발하는 것이 좀 더 근본적인 해결책이라고 할 수 있다.

strict mode를 사용하면 자바스크립트 엔진의 최적화 작업에 문제를 일으킬 수 있는 코드에 대해 명시적인 에러를 발생시킨다.

적용

use strict;를 선두에 추가한다. 전역의 선두에 추가하면 스크립트 전체에 strict mode가 적용된다.

'use strict';
function foo(){
    x=10; // 참조에러
}
foo();

일반 함수의 this

strict mode에서 일반 함수로서 호출하면 this에 undefined가 바인딩된다. 굳이 일반함수에서 this를 사용할 필요가 없기때문이다.

arguments 객체

매개변수에 전달된 인수를 재할당하여 변경해도 arguments 객체에 반영되지 않는다.