미누에요

[JavaScript] strict mode 본문

JavaScript

[JavaScript] strict mode

미누라니까요 2025. 2. 1. 16:18
728x90
반응형
SMALL

자바스크립트에서는 여러모로 암묵적으로 에러를 발생시키지 않는 경우가 허다하다.

이는 유연한 프로그래밍이라고 할 수도 있지만, 복잡한 버그를 발생시킬 수 있다.

 

따라서 우리는 이를 좀 더 엄격하게, 틀에 가두어 사용하기 위해 strict mode를 사용할 수 있다.

 

우선, strict mode의 사용법이다.

'use strict';

function hello(){
    x = 100;
    console.log(x);
}

hello();

 

strict mode를 사용할 곳에 'use strict'를 작성해주면 된다.

이 'use strict'가 작성된 곳부터 적용되기 때문에, 'use strict' 위에 있는 코드가 있다면 그 코드는 strict mode가 적용되지 않는다.

 

 

이러한 strict mode를 사용하여 예방할 수 있는 문제는 아래와 같다.

  • 암묵적 전역
  • 변수 , 함수, 매개변수의 삭제
  • 매개변수 이름의 중복
  • with 문 사용

 

암묵적 전역은 선언되지 않은 변수를 자바스크립트 엔진이 암묵적으로 전역 변수로 선언하는 것이다.

function hello(){
    x = 1000;
    console.log(x);
}

hello();

 

위 코드에서 x를 선언한 코드는 존재하지 않는다. 함수 스코프 내에 x가 존재하지 않으므로 전역 스코프로 이동하여 찾을 것이고, 전역 스코프에도 없기 때문에 에러가 나야할 거 같다.

하지만 자바스크립트 엔진이 x를 전역 변수로 암묵적으로 선언한다.

 

이러한 문제에 strict mode를 사용하여 에러를 발생시킬 수 있는 것이다.

 

 

변수와 함수, 매개변수를 삭제하는 경우에도 원래는 아무 에러를 발생시키지 않지만, strict mode에서는 SyntaxError를 발생시킨다.

'use strict';

var x = 1010;
delete x; // SyntaxError : Delete of an unqualified identifier in strict mode.

 

 

매개변수 이름의 중복도 원래는 자바스크립트 엔진이 에러를 발생시키지 않는다. strict mode를 사용하면 이 또한 SyntaxError를 발생시킨다.

'use strict';

function hello(x, x){
	return x + x; // SyntaxError : Duplicate parameter name not allowed in this context.
}

console.log(hello(1,2));

 

 

with 문은 전달된 객체를 스코프 체인에 추가하는 문이다. 스코프 체인을 건드리는 만큼 잘 사용하면 코드가 간단해지지만 잘못 사용한다면 코드에 치명적인 문제를 야기할 수 있으므로 사용하지 않는 것이 좋다. 

strict mode에서는 with문을 사용하면 바로 SyntaxError를 발생시킨다.

'use strict';

with({x:1}){
	console.log(x); // SyntaxError : Strict mode code may not inclue a with statement
}

 

 

 

기본적으로 자바스크립트는 굉장히 유연한 언어이기 때문에 그대로 사용한다면 발생할 수 있는 문제점이 상당수 존재한다.

그게 우리가 자바스크립트에 대해 깊게 공부하고 코드를 작성해야 하는 이유라고 생각한다.

 

그리고 개인적인 생각으로는 이렇게 통통 튀는 점이 바로 자바스크립트의 매력인 거 같다. ❤️

728x90
반응형
LIST