작성
·
348
0
jQuery 타입 분석 Q&A 3분대에서,
(this : TElement , index : number , oldhtml : JQuery.htmlString)=> JQuery.htmlString
이라는 매개변수 자리에
function () {
return '<div>hello</div>'
}
를 전달하셨는데, 인수로 쓰이는 함수는 매개변수 개수가 똑같을 필요가 없다고 하셨습니다.
개인적인 추측으로는 반공변성과 관련이 있다고 생각이 드는데 , 질문에서 첫번째 함수가 두번째 함수의 서브타입이기 때문에, 첫번째 함수 자리에 두번째 함수를 대입할 수 있다고 이해해도 될까요?
그렇다면 이 예제에서 만약 전달하고 싶은 함수의 매개변수가 4개라면, 반공변성에 의해 어긋나서, 전달하지 못한다고 생각해도 될까요?
답변 2
0
이미 답변해주신 건이지만 이렇게 이해해도 될지 궁금합니다!
(this : TElement , index : number , oldhtml : JQuery.htmlString)=> JQuery.htmlString
개발자가 넘긴 콜백함수를 받은 실제 jquery 라이브러리 내에서 호출할 때는 index, oldhtml등 지정된 타입의 매개변수들을 모두 넘겨 주지만(이 경우 매개변수 빠뜨리면 오류)
ex) jquery 내에서 callback(0, '<div></div>');
jquery 내에서 callback(0); // 오류
jquery 함수에 넘길 콜백함수를 정의할 때는 javascript와 같이 개발자 본인이 사용할 매개변수만 적은 것이다.
라고 이해해도 될까요?
0
아뇨 그냥 되는겁니다. 어렵게 생각할 필요 없습니다. 그 자리에는 그 매개변수가 존재하는 게 맞습니다. 다만 안 썼을 뿐인거죠. 안 쓰는 매개변수를 굳이 적을 필요가없으니 생략하는겁니다.
그냥 된다고 하시니 이해가 잘 안가네요…ㅜㅜ
그냥 return type만 같은 함수는 매개변수 개수가 달라도 상관없이 전달이 가능한 것인가요?
이부분은 이해가 아니라 외워야 하는 부분일까요?
[1, 2, 3].forEach((v, i, a) = { console.log(v) })
forEach 함수는 원래 이런 모양입니다. 그런데 v i a 매개변수를 다 안쓰는 경우에는 굳이 적을 필요없이
[1, 2, 3].forEach((v) = { console.log(v) }) 하잖아요? 근데 그렇다고 i랑 a가 존재 안하는 게 아니죠. 있는데 안 써서 안 적은겁니다. 매개변수의 개수가 다른게 아닙니다.
jQuery에서도 이것과 똑같은 겁니다.
네, 원래 함수는 callback에 모든 인수를 넣어서 호출해줍니다. 다만 인수로 넣은 모든 값을 매개변수로 다 사용할 필요가 없으므로 생략 가능합니다.