가변 카레 함수를 사용하여 값을 증분적으로 합하기
다음과 같이 동작하는 JavaScript 함수 합계를 만들 수 있나요?
sum(1)(2) = 3 sum(1)(2)(3) = 6 sum(1)(2)(3)(4) = 10
간단히 말해서 이 함수를 사용하면 추가 항목을 반복적으로 전달하여 합계를 누적할 수 있습니다. value.
처음에는 JavaScript에서는 이러한 기능이 불가능하다고 들었습니다. 그러나 대체 접근 방식이 등장했습니다. sum 함수 앞에 기호를 추가하는 것입니다.
+sum(1)(2)(3)(4)
부호는 함수와 함께 사용될 때 함수의 반환 값을 숫자로 강제 변환합니다. 따라서 이 경우 sum 함수는 이후 호출할 때마다 증가하는 숫자를 효과적으로 반환합니다.
원하는 동작을 달성하기 위해 sum 함수에 커링 기술을 사용할 수 있습니다. 구현은 다음과 같습니다.
function sum(n) { var v = function(x) { return sum(n + x); }; v.valueOf = v.toString = function() { return n; }; return v; } console.log(+sum(1)(2)(3)(4)); // Output: 10
이 구현은 v 변수에 sum 함수를 래핑한 후 반환됩니다. v 함수를 사용하면 n 변수에 값을 점진적으로 추가할 수 있습니다. 연산자를 사용하여 v를 숫자로 강제하면 누적 합계를 얻을 수 있습니다.
예제에서 console.log 문은 1, 2, 3, 4의 합인 10을 출력합니다.
위 내용은 Curried JavaScript 함수는 어떻게 값을 점진적으로 합산할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!