본문 바로가기
개발공부_Blog/JavaScript

Strict mode (엄격모드)

by 소팡팡 2022. 9. 26.

Strict mode

자바스크립트에서 문법을 더욱 엄격한 오류 검사를 하게 도와줍니다

 

 

아래의 코드에서 콘솔에 찍히게 되는 x의 값은 무엇일까요?

foo함수 내에서 선언하지 않은 x 변수에 값 10을 할당했습니다. 자바스크립트는 x변수가 어디에서 선언되었는지 스코프 체인을 통해 검색하기 시작합니다. foo함수 스코프에는 x변수의 선언이 없으므로, foo함수의 상위 스코프(아래 예제에서는 전역 스코프에 해당)에서 x변수의 선언을 검색합니다. 

 

전역 스코프에도 x변수의 선언이 존재하지 않기 때문에 ReferenceError를 발생시킬 것 같지만 자바스크립트는 암묵적으로 전역 객체에 x프로퍼티를 동적으로 생성합니다. 이러한 현상을 암묵적 전역이라 합니다.

암묵적 전역과 같은 상황은 개발자의 의도와는 상관없이 발생하므로 오류를 일으키는 원인이 될 가능성이 큽니다!!

 

function foo() {
  x = 10;
}
foo()

console.log(x)   // 10

 

이러한 문제를 해결하고자 ES5부터는 strict mode(엄격모드)가 추가되었습니다. 

자바스크립트 언어의 문법을 좀 더 엄격히 적용하고, 오류를 일으킬 가능성이 있는 코드에 에러를 발생시킵니다.

 

 

Strict mode 적용

strict mode를 적용하려면 전역 또는 함수 몸체의 앞에 'use strict'; 를 추가합니다.

코드의 선두에 'use strict';를 위치시키지 않으면 strict mode가 제대로 동작하지 않습니다

// 전역의 선두에 추가한다
'use strict';

function foo() {
  x = 10;
}
foo()

// 함수 몸체의 선두에 추가한다
function foo() {
  'use strict';
  x = 10;
}
foo()

 

 

Strict mode가 발생시키는 에러

  • 암묵적 전역에 대한 에러 : 선언하지 않은 변수를 참조하면 Reference Error가 발생
  • 변수, 함수, 매개변수의 삭제에 대한 에러 : delete연산자로 변수, 함수, 매개변수를 삭제하면 SyntaxError가 발생
  • 매개변수 중복에 대한 에러 : 중복된 매개변수의 이름을 사용하면 SyntaxError가 발생한다
  • with문 사용에 대한 에러 : with 문을 사용하면 SyntaxError가 발생한다

 

댓글