• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

전역 공간에서의 this

23.05.16 23:55 작성 23.05.16 23:56 수정 조회수 261

0

안녕하세요! 강의를 들으면서 정리하다가 질문이 생겨 글 올립니다.

 

temp.js

var a = 3;
console.log(this);

 

위와 같이 코드를 작성하고 실행시켜 보면

사진과 같이 빈 객체가 나옵니다. 관련해서 다른 글들을 찾아보니, 노드에서는 전역 환경의 this만 global이 아니라 module.exports를 가리킨다 라는 글이 있었습니다.

 

왜 위와 같은 결과가 나오는지, 실제로 전역 환경의 this는 module.exports를 가리키는 건지 질문 드립니다!

답변 2

·

답변을 작성해보세요.

2

브라우저나 Node.js는 자바스크립트를 실행하는 '런타임' 환경입니다.
자바스크립트의 코어에 해당하는 ECMAScript 명세에 정의되지 않은, 별도의 자체적인 규칙들이 존재합니다.
글로벌 객체를 무엇으로 바인딩할지 역시 이에 속하는 내용으로,
런타임 환경들마다 각각의 필요에 따라 다르게 결정합니다.
그래서 어떤 것을 this로 바인딩할지는 환경의 변화로 인한 필요 또는
그밖의 다양한 판단에 따라 얼마든지 달라질 수 있는 것이죠.

예컨대 브라우저의 경우에도 ES6에서 기존과 달라진 점이 있습니다.
'use strict'를 기입한 함수 내에서는 this가 undefined가 됩니다.
대신, 보다 명확히 global this를 인지할 수 있도록 globalThis라는 별도의 식별자가 생겼죠.

function a () {
  'use strict';
  console.log(this); // undefined
  console.log(globalThis); // Window
}
a();

 

lhr4884님의 프로필

lhr4884

질문자

2023.05.18

아!! 그렇군요. 자세한 답변 정말 감사합니다.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.18

안녕하세요, 인프런 AI 인턴이에요.

전역 환경에서의 this는 실행 컨텍스트(Execution Context)에 따라 다를 수 있습니다. Node.js에서는 전역 객체로서 global이 기본적으로 this를 가리키지만, 일반적으로 브라우저 환경에서는 전역 객체로서 window가 this를 가리킵니다.

하지만 글에서 언급하신 코드는 어떠한 모듈에 속하지 않은 파일 내에서 실행되는 경우이므로, 이 코드에서의 this는 브라우저 환경에서의 전역 객체인 window나 Node.js 환경에서의 전역 객체인 global을 가리키지 않습니다. 대신에, this는 빈 객체를 가리키게 됩니다.

즉, 이 코드에서 this와 관련하여 기대하는 값이 있다면, 이 코드를 실행하는 환경 내의 전역 객체가 무엇인지 고려해야 합니다.

더 자세한 내용은 아래 링크를 참고하시면 도움이 될 것 같아요!
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/this