[JS] strict mode

strict mode 란?

ES5에서 소개된 strict 모드는 js 의 제한된 버전을 선택하여 암묵적인 "느슨한 모드(sloppy mode)"를 해제하기 위한 방법이다.

strict 모드는 단지 부분적인 것이 아니며, 고의적으로 일반코드와 다른 시멘틱을 가지고 있다.

 

"오해의 소지가 있는 구문을 문법적으로 명확하게 평가하겠다",
"호이스팅은 동일하나, 블럭 내 함수는 블럭 스코프를 갖는다."

 

스크립트나 함수의 맨 처음에 “use strict” 적으면 strict mode를 사용할 수 있다.

 

strict mode의 특징

  • 선언하지 않은 식별자는 접근(access)할 수 없다. -> Reference error
  • 암묵적 전역(var, implicit global)은 허용하지 않는다
  • delete로, 선언된 변수/함수/매개변수를 삭제할 수 없다
  • Block내에서, var는 느슨한 모드와 동일한 스코프이지만, 함수는 Block-Scope이다
  • 한 함수에서 매개변수(parameter) 이름이 동일하면 안된다( = 중복 선언 X)
    strict mode가 아닐 경우, parameter명이 중복되면 뒤에 것이 우선된다.
  • NaN, Infinite 등의 전역 프로퍼티에 값을 할당할 수 없다.
  • ESM(type: "module" in package.json) 모듈은 strict mode로 실행된다.
  • node에서는 this가 모듈객체를 참조하지 않는다. (즉, 전역의 thisValue = undefined)
  • 예약어를 사용할 수 없다.

 

strick mode error

'use strict'

f = 1; 
NaN = 1; // 값 초기화 X
Infinity = 0; // 값 초기화 X
function f(a, a) { console.log('outer f', a); } // 중복선언 에러
delete f; // delete 사용 안됨
{
  f(100); // 'block f'
  function f(a) { console.log('block f', a); }
  //strict mode가 아닐 때는 블록을 나와 메인 스코프의 최상단에서 선언되지만 strict mode에서는 블록스코프이다.
}
f(200); 
// 함수가 호이스팅 되기때문에 가장 먼저 선언되고 그다음에 f가 1로 초기화 되었기 때문에 함수가 아니라는 에러가 나타난다.

 

'Dev > Javascript' 카테고리의 다른 글

[JS] 클로저 (Closure)  (0) 2025.04.09
[JS] 스코프  (2) 2025.04.08
[JS] 실행 컨텍스트  (2) 2025.04.08
[JS] 디스트럭처링 할당 (해체 할당)  (0) 2025.04.08
[JS] 리터럴과 변수, 상수, 데이터 타입  (0) 2025.04.03