작성
·
22
0
// 2. 콜백함수의 활용
function repeat(count, callback){
for(idx=0; idx<count; idx++){
callback(idx);
}
}
repeat(4, function callback(){
console.log(idx * 2)});
repeat(4,(idx)=>{
console.log(idx * 4);
})
repeat(5,()=>{
console.log(idx * 5);
})
repeat()으로 호출할 때 콜백함수까지 같이 불러오는 부분에 대해 궁금증이 생겼습니다.
repeat(인수, 콜백함수)=> 이 부분에서 콜백함수에 매개변수로 idx를 안 넣어도 콘솔창에 결과가 잘 나옵니다. 그런데도 콜백함수 인수를 작성할 때 idx를 꼭 적어줘야 하나요?
repeat(4, (idx) // idx를 넣고
메인 함수 콜백 호출 부분인 callback(idx); 에서 idx를 뺏더니 출력결과가 Nan이 나옵니다. repeat(4, () => 이렇게 idx가 없는 호출문? 에서는 정상적으로 값이 잘 나오는데 저 부분은 왜 안나오는지 궁금합니다.
답변 2
0
안녕하세요 zip님 이정환입니다.
결과적으로 아래 코드처럼, 두번째 인수로 전달되는 콜백함수에 매개변수 idx를 선언하지 않으면 오류가 발생합니다.
function repeat(count, callback) {
for (idx = 0; idx < count; idx++) {
callback(idx);
}
}
repeat(4, function callback() {
console.log(idx * 2);
});
// 이 코드를 실행할 경우 오류가 발생합니다.
오류가 발생하는 이유는 너무나 명확합니다. 콜백함수 내부에서는 idx라는 변수에 접근할 수 없기 때문입니다. idx 변수는 repeat 함수 본문에 선언되어 있고, 콜백함수에는 인수로 전달되고 있으므로 이를 이용하시려면 아래와 같이 콜백함수에 idx라는 매개변수를 선언해주셔야 합니다.
repeat(4, (idx) => {
console.log(idx * 4);
});
PS. 죄송하지만 질문을 정확히 이해했는지 잘 모르겠습니다 ㅠㅠ 혹시 헷갈리는 부분이 있으시다면 조금 더 구체적으로 추가 질문 주시면 답변드리겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. zip님.
자바스크립트에서 콜백 함수와 매개변수에 관련된 궁금증을 해결하실 수 있도록 도와드리겠습니다.
자바스크립트에서는 함수를 직접 호출할 때 필요한 매개변수를 전달하지 않으면 undefined
로 처리되며, 함수 내부의 연산에 영향을 미칠 수 있습니다. 일반적으로 함수가 기대하는 매개변수를 모두 포함하도록 코드를 작성하는 것이 좋습니다. 하지만, 함수가 외부의 변수를 참조할 수도 있기 때문에 코드에 따라 정상적으로 동작할 수도 있습니다. 예를 들어, 여기에선 idx
가 함수 외부에서 글로벌 변수로 선언되어 있기 때문에 콘솔 출력에 사용할 수 있습니다.
callback(idx);
에서 idx
가 없는 경우 NaN이 나오는가?두 번째 질문에 관련해서는, callback(idx);
에서 idx
를 전달하지 않으면, 콜백 함수에서는 undefined
를 받게 됩니다. undefined
에 산술 연산을 수행하면 NaN
(Not a Number)이 나오게 됩니다. 반면, repeat(4, () => ...)
처럼 콜백 함수 자체에서 매개변수를 받지 않고 외부 idx
를 사용했다면, 외부에서 접근 가능한 idx
값을 사용하므로 정상적으로 결과가 나옵니다.
관련 질문과 답변을 통해 더 나은 이해를 도와줄 수 있는 링크를 소개해 드리겠습니다:
위의 링크는 자바스크립트에서 콜백 함수의 호출 및 매개변수 처리에 대해 다루고 있습니다. 이 답변을 통해 콜백 함수의 인자 처리를 알아보시면 많은 도움이 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.