자바 스크립트 함수 프로그래밍 - 태닝

  • 무두질 원칙
  • 어떻게 태닝
  • 무두질 응용 프로그램

 무두질 우선 원칙

무두질 : 수학, 컴퓨터 과학을 복수의 파라미터를 이용하여 변환하는 기능을 무두질 사용되는 기술의 일련의 파라미터의 함수이다.

카레 전단 주요 목적은 시스템, 방법, 유니티 기능을 강제하는 하나 개의 매개 변수의 유지 보수성을 향상시키기 위해, 코드의 구조를 단순화하는 것, 그것을 응집 기능을 수행하기 위해 자연, 커플 링을 감소시킨다.

장점 무두질 : 중복 된 코드를 감소시키는 것은, 코드는 적응성을 향상시킬 수 있습니다.

카레 기본적인 원리, 기능이 실행하는 기준 파라미터의 두 통로의 복수로 분할 제를 수행 :

1  // 의 함수로서 네 매개 변수가 
2  기능 추가 (A, B, C, D) {
 3.      리턴 A가 + B + C + D]    
 . (4)  }
 . 5  // 매개 변수 전달을 무두질 개의 고정 방법을 실현 
. 6  기능 FixedParmasCurry (FU) {
 7.      VAR _arg = Array.prototype.slice.call (인수 ,. 1); // 들어오는 초기 파라미터 무두질하세요 
. 8      복귀  함수 () {
 . 9          VAR newArg _arg.concat = ( Array.prototype.call (인수, 0)); // 접합 파라미터는 현재 실행 
10           fn.apply ( 이 본 , newArg을)
 . (11)      }
 (12) 인 }
 13  //는 시험 
14  VAR의 foo는 = FixedParmasCurry 추가 (1,2 )
 15 CONSOLE.LOG (foo는 (3,4)) // 10 
(16)  // 테스트 두 
. 17  VAR의 재미있는 = FixedParmasCurry (추가 ,. 1 ) ;
 18 CONSOLE.LOG (FUN (2,3,4))는, // 10

하지만 그건 진짜 카레가 기능을 수행하기 위해 여러 번을 통해 매개 변수 각 시간을 통과해야 진정한 카레를 달성하지 않았다,이 함수는 필요한 시간을 달성하기 위해 함수 매개 변수에 인수 될 때까지 실행의 결과를 반환, 그것은 말할 수있다 마다 기능이 각각의 실행 스테이지의 결과를 반환하는 적절한 파라미터를 전달한다. 왜 말합니까? 자세히 커리 분석 애플리케이션.

 둘째, 어떻게 무두질

1  // 무두질 달성 
2  기능 추가 (A, B, C, D) {
 . 3      리턴 A + B + C + D]    
 4.  }
 5.  // 실제 요구 카레 추가 기능이 있어야 다음 
. 6  VAR = newAdd 커리 (추가)
 . 7 newAdd (1,2,3,4 )
 . 8 newAdd (2) (1). (3). (4. )
 . 9 newAdd (1,2) (3,4 )
 10 newAdd ( . 1,2) (3) (4. )
 . 11 newAdd (1,2,3) (4. )
 (12)이다 . newAdd (1) (2) (3,4 )
 (13)이다 . newAdd (1) (2,3,4 ) ;
 14  //즉, 진정한 카레 상기 실시의 임의의 조합으로 구현 될 수있다 
(15)  
(16)  기능 커리 (FN 길이) {
 . 17      VAR의 길이 = 길이 || ; fn.length
 18       함수 () {
 . 19          IF (에서 arguments.length < {길이)
 20              VAR 결합 = FN] .concat (Array.prototype.slice.call (인수, 0 ))
 (21)는              리턴 커리 (FixedParmasCurry.apply ( 은이 - 결합) 길이 , 상기에서 arguments.length)
 22이다          } 다른 {
 23은              리턴 fn.apply ( 이 본를 인수);
 24          }
25      }
 26이다  }
 27  
28  함수 FixedParmasCurry (FN) {
 29      VAR _arg = Array.prototype.slice.call (인수 ,. 1); // 얻기 들어오는 초기 파라미터 무두질 
30      리턴  함수 () {
 31은          VAR newArg _arg.concat = (Array.prototype.slice.call (인수, 0)); // 접합 파라미터는 현재 실행 
32          반환 (fn.apply 이 본 , newArg)
 33이다      }
 34이다 }

분석 달성 : FixedParmasCurry (FN)가 직접 실행, 파라미터 길이 부족 판정을 수행하기 위해 필요한 파라미터의 함수로서 실질적으로 수신 파라미터를 갖는다. 초기화 기능이 필요한 길이 파라미터 무두질의 전체 길이를 달성하기 위해, 전달되는 매개 변수의 길이 매개 변수는 원하는 길이 이상인에서 arguments.length까지 각각 계산 한 후,이 함수 필요한 길이로 전달되는 경우에 해당 수행 함수 (라인 23).

 셋째, 응용 프로그램 카레

 다음 시뮬레이션 예 아약스 요청 요구 사항 :

. (1 개)  함수 아약스 (유형, URL, 데이터) {
 2      VAR의 XHR = 새로운 새 는 XMLHttpRequest ()
 . 3      xhr.open (유형, URL, 참으로 )
 . 4      위해 xhr.send (데이터)
 . 5  }
 . 6  // 대한 요구가 있으면 동시에 동일한 세 연결부에 파라미터 전송이 방법을 따르면 명백한 코드 중복을 표시 
7. 아약스 ( '는 POST', 'www.test.com', 'KEYIN 이름 =' )
 . 8 아약스 ( '포스트' 'www.test2.com', '이름 = KEYIN' )
 . 9 아약스 ( '는 POST', 'www.test3.com', '이름 = KEYIN' )
 10  // 카레 
11.  VAR ajaxCurry = 커리 (아약스);
 12  VAR포스트 = ajaxCurry ( "POST" );
13 일 후 ( 'www.test.com', '이름 = KEYIN' );
14 일 후 ( 'www.test.com2', '이름 = KEYIN' );
15 일 후 ( 'www.test.com3', '이름 = KEYIN');

예에서 그렇게 분명하지 않을 수는 생각할 적어도 한 가지 서비스를 상기 복수의 기능의 일부가, 기본 구현과 일치 할 때, 경우 코드의 결합을 감소시키는 것에 더하여, 이러한 일반적인 예를 들어 변수의 도입뿐만 아니라, 유연성 해체하는 것은 기능 요구 사항을 병합합니다.

 

추천

출처www.cnblogs.com/ZheOneAndOnly/p/11367224.html