윤시의 블로그

[JavaScript] 엄격모드(strict mode) 본문

JavaScript

[JavaScript] 엄격모드(strict mode)

yo09 2025. 2. 25. 15:01

1. strict mode란?

JavaScript에서 strict mode는 JavaScript 코드에 대해 좀 더 엄격한 규칙을 적용하는 모드이다. 이를 사용하면 변수 선언을 하지 않고 사용하는 등의 오류를 미리 발견할 수 있다. 쉽게 말해, 코드에서 잘못된 부분이나 위험한 부분을 강제로 제한해서 실수를 줄이고, 에러를 미리 감지할 수 있도록 도와준다.

  • 일반 모드에서는 실수로 잘못된 코드를 작성해도 에러가 발생하지 않을 수 있지만, strict mode에서는 에러를 즉시 발생시킨다.
  • 예를 들어, 미리 선언되지 않은 변수를 사용하는 경우, strict mode에서는 오류가 발생한다.

2. strict mode 활성화 방법

strict mode는 코드의 첫 번째 줄에 "use strict"; 를 추가하여 활성화할 수 있다. 이렇게 하면 그 이후의 코드에서는 strict mode가 적용된다.

"use strict";  // strict mode 활성화

let x = 10;  // 정상적으로 작동
y = 20;  // ReferenceError: y is not defined (strict mode에서는 선언되지 않은 변수 사용이 에러를 발생시킴)

3. strict mode의 특징

1) 변수 선언 없이 사용 못함

  • strict mode에서는 변수를 미리 선언하지 않고 사용하면 에러가 발생한다.
  • 예를 들어, 변수 y를 선언하지 않고 사용하면, 일반 모드에서는 오류 없이 실행되지만, strict mode에서는 ReferenceError가 발생한다.
"use strict";
x = 10;  // ReferenceError: x is not defined

2) 읽기 전용 속성에 값을 할당할 수 없음

  • strict mode에서는 읽기 전용 속성(예: NaN, Infinity, undefined)에 값을 할당하려 하면 에러가 발생한다.
"use strict";
NaN = 100;  // TypeError: Cannot assign to read only property 'NaN' of object

3) eval에서 변수와 함수 선언 제한

  • eval 함수 내에서 선언된 변수나 함수가 전역 변수로 바뀌지 않도록 제한한다.
"use strict";
eval("var x = 10;");
console.log(x);  // ReferenceError: x is not defined

4) this가 undefined가 될 수 있음

  • 일반 모드에서는 this가 암묵적으로 전역 객체(window 또는 globalThis)를 가리키지만, strict mode에서는 함수 내에서 this가 undefined가 될 수 있다.
"use strict";
function showThis() {
  console.log(this);  // undefined
}

showThis();  // strict mode에서는 `this`가 `undefined`가 됨

4. strict mode 활용 이유

  • 오류 예방 → strict mode는 코드에서 잘못된 부분을 미리 체크하고, 실수로 인해 발생할 수 있는 문제를 방지해준다.
  • 디버깅 용이 → strict mode를 사용하면 자주 발생할 수 있는 숨은 버그를 사전에 예방하고, 개발 중 디버깅을 쉽게 할 수 있다.
  • 최적화 → JavaScript 엔진은 strict mode에서 실행되는 코드를 더 효율적으로 최적화할 수 있다.