[JavaScript] 13. Strict Mode

100tick·2022년 12월 31일
0

JavaScript Deep Dive

목록 보기
13/16
post-thumbnail

아래 코드를 실행하면 JS 엔진은 foo 함수의 Scope에서 x를 찾는다.
그러나 let, var 등으로 선언된 변수가 아니기 때문에 존재하지 않을 것이고, Global Scope로 올라가 검색하게 될 것이다.

function foo() {
	x = 10; 
}

foo();

console.log(x);

이렇듯 Keyword 없이 선언된 변수가 Global Scope에 존재하지 않으면 JS 엔진에 의해 암묵적으로 전역 객체에 x가 동적 생성된다.
이를 Implicit Global, 암묵적 전역이라고 한다.

이는 오류를 발생시키는 원인이 될 가능성이 크기 때문에 반드시 Keyword로 변수를 선언해야 한다.
다른 언어에서는 이러한 오류를 미리 잡아주지만, JS는 이러한 자잘한 실수들을 개발자가 알아서 잘 처리해야 하는 불안정한 면이 있었다.

그래서 ES5부터 strict mode가 도입 되어, 이러한 잘못된 코드를 보고 미리 오류를 발생시킨다.
ESLint, TypeScript 등과 비슷한 것 같다.

ES6에서 도입된 Class와 모듈은 기본적으로 strict mode다.

코드 상단에 'use strict' 한 줄을 추가하면 코드 전체에 적용된다.

'use strict';

function foo() {
	x = 10; // ReferenceError: x is not defined
}

foo();

console.log(x);

함수 바디 상단에 'use strict' 한 줄을 추가하면 함수, 중첩 함수에 적용된다.

function foo() {
	'use strict';
	x = 10; // ReferenceError: x is not defined
}

foo();

console.log(x);

함수 바디 최상단이 아닌 경우 제대로 동작하지 않는다.

function foo() {
	x = 10; // 오류 발생 x
	'use strict';
}

foo();

console.log(x);

0개의 댓글