• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

안녕하세요

21.05.04 17:34 작성 조회수 101

1

안녕하세요 강사님.

수업 즐겁게 잘 듣고 있습니다.

this에 관해 여쭙고 싶은게 있습니다.

      function a() {
        var point = 100;
        function b() {
          console.log(this);
        }
        b();
      }
      a();
이 코드에서는 this가 window로 나오는 이유를 알고 싶습니다.
var a = {
        point: 100,
        b: function () {
          console.log(this);
        },
      };
      a.b();
이 코드에서는 b 앞의 오브젝트가 있기에 this가 a를
가리키는 것은 이해하였습니다.
그렇다면 위와 같은 코드에서 a 내부의 point를 활용하기
위해서는 클로저를 이용하거나 bind로 a를 묶어주는
방법을 사용해야 하나요??
오브젝트.함수 와 같이 오브젝트가 없다면 함수 내부에서
실행되더라도 this가 window를 가리키는건지 여쭙고
싶습니다. 강의를 많이 돌려보았는데 this는 어려운 것
같습니다 ㅜㅜ

답변 1

답변을 작성해보세요.

0

코드에서는 this가 window로 나오는 이유를 알고 싶습니다.

function a() {
  var point = 100;
  function b() {
    console.log(this);
  }
  b();
}

위 코드는 우선 "use strict"를 작성하지 않았습니다. "use strict"를 작성하면 window가 아니라 undefined가 출력됩니다.

위 코드는  아래와 같으므로 this가 window 오브젝트를 참조하게 됩니다.

window.a = function(){
  function b() {
    console.log(this);
  }
  b();
};
window.a();

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

var a = {
  point: 100,
  b: function () {
    console.log(this);
  },
};
a.b();

그렇다면 위와 같은 코드에서 a 내부의 point를 활용하기 위해서는 클로저를 이용하거나 bind로 a를 묶어주는 방법을 사용해야 하나요??

==> 아래 처럼 사용합니다. a.b() 형태로 호출하면 b()에서 this가 a를 참조하므로 this.point로 값을 구할 수 있습니다.
console.log(this.point);

------------------
비기너 강좌를 등록하셨네요. 그러면 여기서 진도를 나가지 말고 비기너를 다시 처음부터 코딩하면서 들으시기 바랍니다. 반드시 코딩을 해야 합니다. 느릴 것 같지만 느리지 않습니다. 기반이 튼튼해야 건물을 높게 지을 수 있습니다.