TIL (231016)

Jtiiin:K·2023년 10월 16일
0

내일배움캠프

목록 보기
8/85
post-thumbnail

오늘 한 일

알고리즘 특강
자바스크립트 문법 강의 수강

오늘 공부한 내용

this, 바인딩

📍 https://velog.io/@jetiiin/this-바인딩
📍 https://velog.io/@jetiiin/명시적-바인딩-call-apply-bind

어려웠던 내용

강의에서 잠깐 Math.max.apply()라는 코드가 나왔는데 왜 쓰는지 이해가 안됐다 @_@
ES6의 스프레드 문법이 없던 시절 썼던 문법이라고 하는데
this 바인딩 때문에 생겨난 메소드를 this 바인딩이 필요 없는 곳에서 왜 써야하는지
(배열을 넘겨주기 위해서인가?)
솔직히 100% 이해 안됐지만.. 일단 넘어가기로..
(참고 코드에서도 왜 array 넘겨주는지 잘 모르겠음 ㅠㅠ)

// 전역변수에 배열을 넣어 Math.max 함수를 쓰면 NaN가 나온다
var arr = [1,3,5,7,9]
Math.max(arr) // NaN

// 이를 해결하기 위해 apply를 사용 (ES6 이전)
// arr 변수 대신 배열을 바로 넣어도 됨 => apply는 배열'만' 보낼 수 있음
Math.max.apply(null, arr);

💡 null을 사용한 이유?
1. apply 메소드의 첫 번째 파라미터로는 Math.max()함수 내부에서 사용할 this 객체를 전달해야 하는데, 여기서는 따로 this 객체를 사용하지 않으므로(=필요 없으므로) null 전달
2. Math.max() 함수로 전달할 파라미터를 배열 형태로 전달 (=...arr과 동일한 효과)

💡 apply 참고코드 : 배열에 배열을 붙이기 위해 apply 사용하기
💥 push, concat 사용 시 불편함

  • push를 이용하면 단일 요소만 추가됨
  • 기존 배열에 추가하고 싶지만 concat을 사용하면 새 배열로 반환됨

✅ 해결

var array = ["a", "b"];
var elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array); // ["a", "b", 0, 1, 2]

느낀점

  1. 알고리즘 이거.. 특강 들어보니 더 막막한데..
    공부한다고 될 일인가 ㅠㅠㅠㅠ
  2. 강의 후반부로 갈수록 개념들이 더 어렵다
    내일이면 내가 오랫동안 이해 못했던 promise 파트가 나오는데..
    부디 조금이라도 이해할 수 있기를 🥺..

참고 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

profile
호기심 많은 귀차니즘의 공부 일기

0개의 댓글