strict 모드

도현수·2022년 7월 25일
0

javascript

목록 보기
18/20

엄격 모드는 ES5에 추가된 문법이다(엄격 모드를 적용하지 않은 상태를 느슨한(Sloppy mode)모드 라고도 하는데 이는 정식 용어는 아니다.). 오타 혹은 지식의 부족으로 인한 실수는 언제나 발생하기 마련이다. 엄격 모드는 이를 줄이려는 노력 중 하나인데, 조금 쉽게 '엄격한 문법 검사'라고 생각하면 될 것이다.

strict mode 적용하기

엄격 모드를 적용하려면 전역의 맨 앞 혹은 적용하고자 하는 함수 블럭의 맨 앞에 'use strict'를 추가한다. 전역의 맨 앞에 사용한 경우 해당 스크립트 전체에 엄격 모드가 적용된다. 이 때, 한번 적용한 엄격 모드를 되돌릴 방법은 없다는 것에 주의한다.

// 스크립트 전역 맨 앞에 선언
'use strict';

function test() {
	x = 10;   // 레퍼런스 에러 발생
}
function test() {
'use strict';
	x = 10;   // 레퍼런스 에러 발생
}

다만 전역과 함수 단위의 적용 둘 다 지양하는 편이 좋다. 우선 외부 라이브러리를 이용하는 경우 라이브러리가 non-strict 인 경우가 있어서 전역에 엄격 모드를 적용하는 것은 좋지 않다. 또한 함수의 경우, 엄격 모드를 적용한 함수가 비엄격 모드 함수에 참조될 경우 문제가 발생한다. 따라서 엄격 모드는 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 좋다.

엄격 모드에서의 에러

암묵적인 전역

// 스크립트 전역 맨 앞에 선언
'use strict';

function test() {
	x = 10;   // 레퍼런스 에러 발생
}

선언하지 않은 변수(위의 경우는 x)를 참조할 경우 레퍼런스 에러가 발생한다.

delete를 이용한 삭제

(function() {
   'use strict';
	var x = 10;
    delete x ; // Syntax Error
    
    function test(y) {
    	delete y // Syntax Error
        }
   delete test; // Syntax Error
   }());

delete 연산자로 변수, 함수, 매개변수를 삭제할 수 없다.

매개변수 이름 중복

(function () {
	'use strict';
	function(x,x){ //에러 발생
    return x-x
    }
    

with문 사용 금지

(function() {
	'use strict';
    with ({x : 1}) { //Syntax Error
    console.log(x);
    }
}());

여기서 console.log(x)는 전역의 x인지 아니면 with로 가져온 x인지 모호하다. 따라서 엄격 모드에서는 이러한 사용을 막는다.

0개의 댓글