[TIL] 2020/08/24

yongkini ·2020년 8월 24일
0

Today I Learned

목록 보기
16/173
post-thumbnail

Today, I Learned

  • advanced 과제였던 'parseJSON'을 완성하고 제출했다. 어제부터 작업했는데, 정말 밑 빠진 독의 밑을 고쳐놓으면 다른 부분이 새고, 그 부분을 고치면 다른 부분이 새는 느낌으로 하나하나 디버깅해가는 과정을 경험하면서 지식도 지식이지만, 개발자로서의 참을성을 기르게 되는 것 같다. 뿐만 아니라, 어제는 감도 안오던 문제가 다음날 아침에 새로운 마음으로 바라보면, 말도 안되게 쉬운 로직이 떠오르는 현상도 경험할 수 있었다.
  • bind, call, apply에 대해서 복습 차원의 공부를 했다. call, apply, bind는 세부적으로는 차이가 있지만, 공통적으로, this에 무엇이 바인딩 될지를 결정해주는 역할을 한다. 달리 말해, 특정 메서드를 쓰고 싶은데, 타입이 다르거나, 잠시 빌려쓰고 싶을 때, 메서드 안의 this를 원하는 객체에 바인딩시켜 쓸 수 있도록 하는 것이다. 이 때, call 과 apply는 함수를 호출하는 기능까지 가지고 있고, call은 해당 메서드에 넣을 인자를 'x,y,z'형식으로 받는 다는점, apply는 배열 형태로 받는다는 점에서 차이를 가진다. 이에 반해, bind는 함수를 호출하지는 않고, this에 원하는 객체를 바인딩해서 (인자를 받을 수 도 있는데, call과 같은 형태로 넣어준다)함수를 리턴해준다. 그래서, setTimeout(여기에서 받는 인자는 this가 자동으로 window가 됨)에 함수를 넣어줄 때 임의로 this를 설정해줄 때 쓰거나, 커리함수를 만들 때도 이용된다. 추가적으로, querySelectorAll과 같은 dom으로 받은 array-like 형태의 nodelist를 배열처럼 쓰기 위해서 apply 혹은 call을 이용하기도 한다.
    ex) Array.prototype.map.call(nodeList, func);
  • this는 상황에 따라 자동으로 바인딩될 대상을 선택하는 데 그 5가지를 기억해두자.
    • constructor function에서는 새로 생성되는 객체(인스턴스)
    • 일반 함수에서는 window(전역객체)
    • 메서드에서는 메서드를 호출하는 객체
    • 전역코드에서는 window(전역객체)
    • apply, call, bind를 통하면 지정된 객체

Planning to Study

  • 일단 내일은 코드스테이츠 시험에 집중!
profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글