inflearn logo
강의

Course

Instructor

Core JavaScript

전역 공간에서의 this

Resolved

426

lhr4884

2 asked

0

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

 

temp.js

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

 

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

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

 

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

javascript

Answer 2

2

jaenam

브라우저나 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();

 

0

lhr4884

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

1

communityai8509

안녕하세요, 인프런 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

인스턴스에서 prototype 프로퍼티에 직접 접근해야하는 이유

0

59

1

setTimeout 에서 this

0

81

1

2강부터 영상이 나오지 않습니다.

0

175

1

자바스크립트 주석에 이상한 점이 있어서 문의드립니다.

0

219

2

return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.

1

259

1

클래스 static 멤버

1

253

1

실행컨텍스트와 스택프레임

2

567

1

프로토타입으로 상속할때 브릿지 사용 이유

0

320

1

호이스팅 관련 질문

1

335

1

책 66p. 예제 3-2 질문입니다.

0

356

1

강의 내용 10:58 캡슐화 질문입니다.

1

398

1

강의 내용 5:10 질문입니다.

1

422

2

18:31 addEventListener의 this

1

480

1

outerEnvironmentReference 질문

1

372

1

실행 컨텍스트와 클로저에 대해 질문드립니다.

1

448

1

Object.prototype.constructor의 [[prototype]] ?

1

658

1

함수를 값으로 할당할 때

2

457

1

15:54 'ddd' 사라지는 오류?

4

375

1

프로토타입 getPrototypeOf(instance).constructor(n,a) 질문입니다.

1

404

1

기본형/가변형 질문입니당

0

333

0

선생님 그러면 섹션 0만 봐도 무방한가요!?

0

335

1

Hoisting과 environmentRecord에 관한 질문입니다.

1

291

1

안녕하세요, 데이터 변경 질문입니다.

0

328

1

선생님 class 상속파트에서 궁금한게 있습니다.

0

235

1