• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

this가 가르키는 값이...

20.08.04 00:43 작성 조회수 141

0

아래의 코드를 node로 실행해보면 

콜백함수가 실행이 될때 vals of undefined... 에러가 발생합니다!

this 가 전역객체를 가르키게 된다고 배운것 같은데

전역에 var varls를 정의해도 읽지못하네요 ... 혹시 이유를 여쭤봐도 되까요 ㅠㅠ 

var arr = [1, 2, 3, 4, 5];
// var vals = [1,1,1];

var obj = {
vals: [1, 2, 3],
logValues: function(v, i) {
if (this.vals) {
console.log(this.vals, v, i);
} else {
console.log(this, v.i);
}
}
};

obj.logValues(1, 2);
arr.forEach(obj.logValues);
var obj = {
vals: [1, 2, 3],
logValues: function(v, i) {
if (this.vals) {
console.log(this.vals, v, i);
} else {
console.log(this, v.i);
}
}
};

obj.logValues(1, 2);
arr.forEach(obj.logValues);

답변 2

·

답변을 작성해보세요.

2

node.js 환경에서 실행하셨다면 this가 global이 나오는게 맞습니다.
실행환경이 무엇인지 확인해보시기 바랍니다.

만약 nodejs 기반의 가상 환경을 별도로 구축해 놓은 툴에서 실행하신 거라면,
해당 툴이 무엇이냐에 따라 결과는 달라질 수밖에 없습니다.
그리고 그런 툴의 전역공간을 'nodejs의 전역공간'이라고 할 수도 없습니다.
왜냐하면 그런 툴은 대부분 nodejs라는 큰 틀 안에서 만들어놓은 '외부와 단절된 별개의 공간'을 추구하기 때문에,
하나의 커다란 스코프 안에 자신을 가둬놓게끔 구현되어 있기 때문입니다.
이 '큰 스코프'를 전역스코프로 인식하게끔 구현해 놓았지만,
실제로는 'nodejs의 전역스코프'가 아닌 결국은 전역스코프 내부에 속한 별도의 스코프일 뿐이기 때문에
nodejs의 전역객체와는 무관하게 됩니다.

nodejs에서 위 코드를 확인하는 방법은,

1. 터미널 / shell 등에서

> node

라고 입력한 다음 한줄씩 입력하는 방법

2. js 파일을 작성한 다음 터미널 / shell 등에서 해당 js 파일을 실행하는 방법이 있습니다.

> node a.js

(파일명이 a.js인 경우)

0

minseob님의 프로필

minseob

질문자

2020.08.04

궁금했던 점이 완벽하게 해결되었습니다 ㅠㅠ 

감사합니다 !!