_curry 에서 질문 또 있어요

미해결질문
송이준 프로필

function _curry(fn){

return function(a, b){

return arguments.length === 2 ? fn(a,b) : function(b){ return fn(a, b); };

}

}

var add = _curry(function (a, b){

return a + b;

});

var add10 = add(10);

console.log(add10); ---> function(b){ return fn(a,b); }

console.log(add10(5)); ---> 15

제가 이해가 안가는 부분은 _curry 함수에서 전달받는 매개변수가 두개가 아닌 경우에

항상 function(b){ return fn(a,b); } 가 실행되니까, a + b 라는 최종적으로 실행하게 될 연산에 대해 계속해서 b 라는 변수에만 값을 할당해주게 되는데, 어떻게 10 + 5라는 연산이 되는지 모르겠어요.

add(10)의 최종 결과는 a + 10이 되고 , 여기서 add(10)을 add10 이라는 변수에 담고 다시

add10(5)를 실행하게 되면....어떻게 되는건지 상상이 안되요.

유인동 프로필
유인동 2달 전

클로저에 대해서 공부해보셔야할거 같아요.

a 를 갖고 있는 함수가 리턴되는 것이에요 :)

송이준 프로필
송이준 2달 전

아....매개변수가 두개인 함수에서 매개변수를 하나만 전달하면, 그냥 앞부분의 매개변수부터 차례대로 전달이 되는거군요... 그래서 function add( a, b) { return a + b } 에서 add(10) 을 실행하면 add 라는 함수의 매개변수에 a = 10 , b = undfined 가 되는거군요....
위의 문제에서는,
여러개의 매개변수를 전달받는 함수의 경우, 매개변수를 하나만 전달 받으면 가장 앞부분의 매개변수 부터 값을 전달받으니까...
var add10 = add(10) 여기서 a 라는 매개변수에 10을 할당한 상태이고..
add10 은 function(b){ return fn(a, b) } 인데, 이걸 실행시키면 반환값인 fn(a,b) 가 나오니까
function (a, b){
return a + b;
} 이게 실행.
여기서 a 는 맨 첨에 10으로 할당한 상태니까 매개변수 b 에만 값을 전달해주면 되는거고... 이렇게 차례대로 매개변수를 전달 받으니까 삼항 연산자에서 뒷부분의 a, b 순서를 바꾸면 안되겠네요.
삼항연산자 뒤의 b, a는 매개변수일 뿐이지 같은 값을 저장하고 있는 변수값이 아니라는걸 제대로 이해못했어요.
앞서 드린 질문도 해결되었어요//

유인동 프로필
유인동 1달 전

다행이네요!!

멋집니다.

열심히 공부해주셔서 고맙습니다!