• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

왜 node 환경과 브라우저 환경에서 전역 this의 동작이 다른가요?

19.05.01 21:49 작성 조회수 233

0

강의 중간에 나온 함수에서 `this.value = 3`이 브라우저 환경에선 window.value로 할당되는 반면 노드 환경에서는 왜 그렇게 동작하지 않는지 궁금합니다.

답변 6

·

답변을 작성해보세요.

0

hyuk22님의 프로필

hyuk22

질문자

2019.05.27

아 그런거군요ㅎㅎ 답변감사합니다!

0

아아, 이제야 질문을 제대로 이해했네요. 처음부터 강의영상의 어떤 부분에 관한 질문인지를 표기해주셨으면 훨씬 빨리 해결되었을텐데 ^^;

강의 영상에서 나오는 결과값은 Quokka 라고 하는 VSCode 라이브러리가 실행한 결과값입니다. 이녀석은 별도로 노드 환경을 구성해서 결과를 표기하는데, 일반적으로 node를 직접 열어서 실행하는 것이 아니라 iframe처럼 내장 프레임을 만들고 그 프레임 안에서 코드를 실행시키기 때문에, 전역객체의 결과에 대해서는 정상적인 실행을 통해 확인할 떄와 값이 달라지는 경우가 종종 발생합니다.

이는 라이브러리의 실행 환경이 달라서 발생한 문제인건데, 지금 들어보니 강의 당시에 제가 '노드 환경이라서 결과가 다르다'면서 설명을 넘어가버렸었군요. 지적 감사합니다.

노드 버전과는 관계가 없습니다. ES6를 지원하는 한은 (제 기억으론 6버전 이상) 모두 동일한 결과를 얻을 수 있습니다.

0

hyuk22님의 프로필

hyuk22

질문자

2019.05.26

친절한 답변 감사합니다. 저는 global 객체의 프로퍼티로 할당되는 것 까진 이해했는데 이 강의 1:55 부분에서 obj의 setValue 메소드 안에 있는 즉시실행 함수안에서 this.value = 3 을 했는데 console.log(value)했더니 0이 나오길래 global.value = 3 이 된게 아닌가 해서 물어봤습니다. 제 노드 환경에선 value가 3이라고 잘 출력되네요. 재남님이 하실 때는 버전이 달라 동작방식이 틀렸던 건가요?

0

네 맞습니다. nodejs 환경의 함수 내부에서 `this.value = 3` 구문을 추가하고 함수를 호출하면 global.value에 3이 할당됩니다.

function a () {
    this.value = 4;
}
a();

console.log(value, this.value, global.value);    // 4 4 4

 

0

hyuk22님의 프로필

hyuk22

질문자

2019.05.21

그러면 nodejs환경에선 global.value에 할당되어야 하는 것 아닌가요?

0

'전역객체'라는 객체는 자바스크립트 구동 환경에서 제공하는 객체를 바라보도록 되어있기 때문입니다.

브라우저 환경에서는 window라는 객체가 전역객체를 바라보는 반면,

node.js 환경에서는 global 이라는 객체를 바라보도록 되어있습니다.