>  기사  >  웹 프론트엔드  >  카레의 원리가 무엇인지 아시나요? JavaScript 함수 커링 원리 및 사용 예

카레의 원리가 무엇인지 아시나요? JavaScript 함수 커링 원리 및 사용 예

零下一度
零下一度원래의
2017-04-21 09:58:431470검색

이 글은 주로 자바스크립트 함수 커링의 원리와 사용법을 소개하고, 함수 커링의 개념과 원리, 기능을 분석하고, 커링 함수의 구체적인 사용법을 예시 형태로 제공하고 있습니다.

이 글의 예시에서는 자바스크립트 함수 커링의 원리와 사용법을 설명합니다. 참고용으로 모두와 공유하세요. 자세한 내용은 다음과 같습니다.

커링은 여러 매개변수를 허용하는 함수를 단일 매개변수를 허용하는 함수로 변환하는 변환 프로세스입니다(주석: 원래 함수의 첫 번째 매개변수). ) 함수는 추가 인수가 필요한 경우 나머지 인수를 받아들이고 결과를 반환하는 새 함수를 반환합니다.

즉, 일부 매개변수를 수정하고 나머지 매개변수를 받아들이는 함수를 반환하는데, 이를 부분 계산 함수라고도 합니다. 적용 범위를 좁히고 보다 타겟화된 함수를 만드는 것이 목적입니다.

예를 들어 자기소개 기능을 만들고 싶은데, 이름, 성별, 나이만 입력하면 됩니다. 하지만 A가 이 기능을 사용하면 전화할 때마다 이름과 성별을 입력해야 합니다. 실제로 나이만 변경된 것입니다. 이 때문에 A는 자신을 위한 카레 자기소개 기능을 생성하게 됩니다. 성별은 고정되어 있습니다.

관련 코드는 github에서 확인해주세요.


function curry(fn){
  var args = Array.prototype.slice.call(arguments, 1);
  return function(){
    var innerArgs = Array.prototype.slice.call(arguments);
    var finalArgs = args.concat(innerArgs);
    return fn.apply(null, finalArgs);
  };
}
function selfIntroduction(name, gender, age){
  console.log('hi, I am ' + name + ', ' + age +' years old ' + '. I am a ' + gender + '.');
}
var curriedSelfIntroduction = curry(selfIntroduction, 'A', 'man');
curriedSelfIntroduction('12');
curriedSelfIntroduction('13');
curriedSelfIntroduction('14');

실행 후 결과입니다.

물론 새로운 범위를 바인딩하는 커리 함수를 작성할 수도 있습니다.


function curry(fn, context){
  var args = Array.prototype.slice.call(arguments, 2);
  return function(){
    var innerArgs = Array.prototype.slice.call(arguments);
    var finalArgs = args.concat(innerArgs);
    return fn.apply(context, finalArgs);
  };
}

커링 함수는 훌륭하지만 정의하는 함수의 매개변수 순서에도 주의를 기울여야 합니다. 함수 커링을 사용하면 복잡한 기능을 더 작고 분석하기 쉬운 부분으로 분리할 수 있습니다. 이러한 작은 논리 단위는 확실히 이해하고 테스트하기가 더 쉽습니다. 그러면 애플리케이션이 작은 단위의 깔끔하고 정돈된 조합이 됩니다. 따라서 카레 함수를 적절하게 사용할 수 있다면 JS 코드가 더욱 우아해집니다.

참고: 함수를 전처리하는 또 다른 방법인 ES6(ES2015)의 Proxy를 살펴보는 것이 좋습니다.

위 내용은 카레의 원리가 무엇인지 아시나요? JavaScript 함수 커링 원리 및 사용 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.