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

이민석님의 프로필 이미지

작성한 질문수

[리뉴얼] 타입스크립트 올인원 : Part2. 실전 분석편

Q&A

함수를 매개변수로 전달시

작성

·

338

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와 같이 개발자 본인이 사용할 매개변수만 적은 것이다.

라고 이해해도 될까요?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네, 원래 함수는 callback에 모든 인수를 넣어서 호출해줍니다. 다만 인수로 넣은 모든 값을 매개변수로 다 사용할 필요가 없으므로 생략 가능합니다.

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에서도 이것과 똑같은 겁니다.