1. 왜 나의 컴퓨터에서는 전역객체가 undefined인 것일까?

책에서 나온대로라면, window, this 를 출력하면 특정 객체값이 나와야 한다. 하지만, 실제로 브라우저 콘솔에서 하게 되면(크롬 최신 버전 기준) 그러지 않는 경우가 있다.

Untitled

이는 엄격모드가 켜져있기 때문이다.

엄격모드에서는 단순 전역 객체 접근 혹은 this 접근에 대해서 undefined로 처리해버린다.

(여담으로, 기존에 브라우저들은 테스트를 위하여 콘솔에 엄격모드를 기본적으로 꺼두는 경우가 많았다고 한다(고 기억한다). 지금은 다시 확인해보니, 최신 버전 브라우저는 모듈 유사 환경으로 콘솔을 만들어 자동으로 엄격모드가 적용되는 경우가 많다고 한다. )

엄격모드(strict mode)

배경

자바스크립트는 꽤 오랫동안 호환성 이슈 없이 발전해왔다. 기존의 기능을 변경하지 않으면서 새로운 기능이 추가되는 방식으로 발전했기 때문이다. 덕분에 과거에 작성한 코드가 절대 망가지지 않는다는 장점을 가지고 있었다.

그러다 ECMAScript5(ES5)가 등장(2009년도)하고 나서 기존 기능중 일부가 변경되기 시작하였다. 이로인하여 하위호환성 문제가 발생할 우려가 존재하였고, ES5의 변경사항 대부분에 대해서 기본 사용 환경에서 활성화되지 않도록 만들었다. ‘use strict’ 라는 특별 지시자를 사용하여 엄격모드를 활성화 하였을 때 사용할 수 있도록 하여 하위호환성을 지키게 되었다.

사용법

스크립트 최상단에 ‘use strict’ 문자를 넣어주면 된다.

"use strict";

// 이 코드는 모던한 방식으로 실행됩니다.
...