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

이민석님의 프로필 이미지

작성한 질문수

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

Q&A

함수를 매개변수로 전달시

23.01.22 23:05 작성

·

337

0

jQuery 타입 분석 Q&A 3분대에서,

(this : TElement , index : number , oldhtml : JQuery.htmlString)=> JQuery.htmlString

이라는 매개변수 자리에

function () {

return '<div>hello</div>'

}

를 전달하셨는데, 인수로 쓰이는 함수는 매개변수 개수가 똑같을 필요가 없다고 하셨습니다.

개인적인 추측으로는 반공변성과 관련이 있다고 생각이 드는데 , 질문에서 첫번째 함수가 두번째 함수의 서브타입이기 때문에, 첫번째 함수 자리에 두번째 함수를 대입할 수 있다고 이해해도 될까요?

그렇다면 이 예제에서 만약 전달하고 싶은 함수의 매개변수가 4개라면, 반공변성에 의해 어긋나서, 전달하지 못한다고 생각해도 될까요?

 

 

답변 2

0

하정훈님의 프로필 이미지

2023. 07. 11. 22:27

이미 답변해주신 건이지만 이렇게 이해해도 될지 궁금합니다!

(this : TElement , index : number , oldhtml : JQuery.htmlString)=> JQuery.htmlString

개발자가 넘긴 콜백함수를 받은 실제 jquery 라이브러리 내에서 호출할 때는 index, oldhtml등 지정된 타입의 매개변수들을 모두 넘겨 주지만(이 경우 매개변수 빠뜨리면 오류)

ex) jquery 내에서 callback(0, '<div></div>');

jquery 내에서 callback(0); // 오류

jquery 함수에 넘길 콜백함수를 정의할 때는 javascript와 같이 개발자 본인이 사용할 매개변수만 적은 것이다.

라고 이해해도 될까요?

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

2023. 07. 11. 23:42

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

0

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

2023. 01. 22. 23:35

아뇨 그냥 되는겁니다. 어렵게 생각할 필요 없습니다. 그 자리에는 그 매개변수가 존재하는 게 맞습니다. 다만 안 썼을 뿐인거죠. 안 쓰는 매개변수를 굳이 적을 필요가없으니 생략하는겁니다.

이민석님의 프로필 이미지
이민석
질문자

2023. 01. 23. 10:35

그냥 된다고 하시니 이해가 잘 안가네요…ㅜㅜ

그냥 return type만 같은 함수는 매개변수 개수가 달라도 상관없이 전달이 가능한 것인가요?

이부분은 이해가 아니라 외워야 하는 부분일까요?

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

2023. 01. 23. 11:28

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