인프런 커뮤니티 질문&답변

이고은님의 프로필 이미지
이고은

작성한 질문수

자바스크립트 비기너: 튼튼한 기본 만들기

3. 콜백 함수를 가진 Array 메소드, forEach()

this 질문

작성

·

229

1

안녕하세요 선생님!

forEach()매소드에서 설명해주신 this에 대해 더 설명 해주실 수 있으실까요? 구글링도 해보았는데 더 헷갈리네요ㅠ

"this는 함수 내에서 전역변수의 값에 접근할 때 사용한다" 이렇게 이해하면 되는건가요?

var list = [1,2];

var fn = function(el, index, all){

    console.log(el + this.ten);

};

list.forEach(fn, {ten : 10});

답변 6

0

김영보님의 프로필 이미지
김영보
지식공유자

디버거와 관계없어요. 강좌의 환경 설정을 참조하세요. 이제 얼마 안 남았으니 화이팅하고요. 끝나면 중고급 가기 전에 지금처럼 코딩하면서 다시 전체를 들으면서 정리하기 바랍니다.  기본이 중요하며 비기너 과정에 기본이 거의 담겨 있어요. 여기서 정리안되면 다음은 외우게 되는데요, 이건 아닌거죠^^

0

이고은님의 프로필 이미지
이고은
질문자

네, 답변 감사합니다! 함수에 대한 이해가 부족해서 이런 궁금증이 발생되는 거군요ㅜㅜ 강좌 들으면서 더 이해하도록 하겠습니다. (그리고 앞서 보여드린 스크립트에는 디버거가 빠져있지만 디버거때문에 onload를 사용하였습니다..!)

0

김영보님의 프로필 이미지
김영보
지식공유자

첫 줄에 onload를 사용하고 있는데요, 강좌에서 defer를 사용하라고 했어요. 물론 onload를 사용해도 문제는 없지만...

0

김영보님의 프로필 이미지
김영보
지식공유자

콜백 함수를 가진 함수들의 기본을 이해하지 못하는 느낌이 듭니다. 강좌를 다시 듣고 코딩하고 디버거 걸어 따라가면서 감을 잡기 바랍니다. 질문의 답은 어렵지 않으나 질문보다 더 중요한 것을 놓치게 될 것 같네요. 

0

이고은님의 프로필 이미지
이고은
질문자

답변 감사합니다. 어느정도 감은 오지만 중고급강좌에서 더 확실하게 배워야 할 거 같네요 :)

그리고  foreach문에 대해 여쭤보고자 합니다.

window.onload = function(){

var value = [1,2,3,4,5];

var fn = function(prev, curr, index, al){

console.log(prev + "," + curr);

return prev + curr;

}

var result = value.reduce(fn);

console.log("결과: ", result);

}

reduce()에서 return으로 반환된 값은 result에 할당되어야 되지 않나요?

왜 반환값이 첫번째 파라미터 값으로 넘어가게 되나요? 그냥 reduce()매소드의 정해진 규칙이라고 보면 될까요?

0

김영보님의 프로필 이미지
김영보
지식공유자

답장이 늦어 미안합니다.
this을 자세하게 설명하려면 사전 설명이 필요합니다. this는 현재 듣는 정도로 마무리하고, 다음 강좌인 "자바스크립트 중고급" 과정에서 논리적으로 접근하고 있으니 자세한 것은 그 강좌를 들으면 될 것 같아요. 위에 작성한 코드에 대해서만 답글을 작성하려고 합니다.

this는 오브젝트, 인스턴스, 호출한 함수 앞에 작성한 오브젝트를 함수에서 참조합니다.
아래 코드에서 show() 함수에서 this가 point 오브젝트를 참조합니다.
var point = {
  bonus: 100,
  show: function(value){
     // this. point.bonus를 참조합니다.
    // 100 + 200을 하게 되어 300이 출력됩니다.
    web.log(this.bonus + value);
  }
};
point.show(200);

------------------------

"this는 함수 내에서 전역변수의 값에 접근할 때 사용한다" 이렇게 이해하면 되는건가요?
==> 아래는 글로벌 변수를 참조하는 형태입니다.

var value = 500;
function getValue(){
  // getValue()를 호출하면서 함수 앞에 오브젝트를 작성하지 않으면
  // 함수 안에서 this가 글로벌 오브젝트를 참조합니다. 
  // value 변수가 글로벌 오브젝트에 있으므로 this.value로 값을 구할 수 있습니다.
  // "use strict"를 선언하고 함수 앞에 오브젝트를 작성하지 않으면 에러가 발생합니다. 
  return this.value;
};
console.log(getValue());

이고은님의 프로필 이미지
이고은

작성한 질문수

질문하기