javascript_javascript 기술의 부분 응용 학습

WBOY
풀어 주다: 2016-05-16 17:44:11
원래의
1028명이 탐색했습니다.

이번에는 부분적용(Partial Application)에 대해 알아보겠습니다. 먼저 함수 소개를 살펴보겠습니다. 위키에 간략한 소개가 있습니다.
수학에서 함수는 각 입력 값과 고유한 출력 값 간의 대응을 설명합니다. 기호는 f(x)입니다. 예를 들어, f(x)=x2라는 표현식은 각 입력 값 x가 고유한 출력 값 x2와 연관되어 있는 함수 f를 나타냅니다.

따라서 입력 값이 3이면 해당 출력 값은 9입니다. 그리고 g(x,y) = xy에는 두 개의 매개변수 x와 y가 있고 곱 xy가 값입니다. 함수는 위에서 설명되었으며(편의상 x와 y가 모두 정수라고 가정), 함수의 두 가지 예를 다른 방식으로 살펴보겠습니다. x -> x2) 즉, f를 x2에 매핑한 후 int ->

int를 허용하고 int를 반환합니다. g(x,y)를 다시 보면 x -> y -> z(xy)로 표현될 수 있습니다. 즉, x, y는 z부터 g까지 매핑되며 int -> int -> int; g(x,y) 함수를 살펴보고 JavaScript를 사용하여 구현해 보겠습니다.

코드 복사 코드는 다음과 같습니다. :

function g(x,y){
return x*y;
}

완벽하고 수학적 정의에 매우 가깝습니다. x와 y라는 두 개의 매개변수를 차례로 받아들입니다. 그리고 둘의 곱을 반환합니다. 그러나 x=n(n은 자연수)과 같이 x가 상수인 경우. 그러면 g(n,y)=ny입니다. 이는 매개변수 y를 받아들이고 ny를 반환하는 상수와 변수의 곱이 됩니다. 즉, int -> int;로 작성된 y -> z(ny)의 매핑입니다. 따라서 위의 작업을 이런 방식으로 이해할 수 있습니다. g(x,y)는 매개변수 int를 받아들이고 int ->int 함수를 반환합니다. 이 반환된 함수는 int만 허용하고 int를 반환합니다. 자바스크립트로 표현해보자:
코드 복사 코드는 다음과 같다.

var h = g(2 );

h는 함수 h(y)=2y를 나타냅니다. 이런 식으로 h(5)=10, h(13)=26 등이 됩니다.
코드 복사 코드는 다음과 같습니다.

h(5); (13) ;

이 기술은 여러 매개변수가 필요한 함수 형식을 단일 매개변수를 허용하는 함수 체인으로 변환하는 것입니다. 이는 일반적으로 Haskell을 기리기 위해 붙여진 이름입니다. 커리, 그러나 그는 첫 번째 제안이 아닙니다. 하지만 아쉽게도 자바스크립트는 이러한 기능을 지원하지 않습니다. 따라서 이러한 기능을 구현하려면 약간의 작업이 필요하며 이는 복잡하지 않습니다. 주요 목적은 매개변수를 저장하는 것이며, 함수 체인에서 다음 함수 호출을 기다릴 때 이전 매개변수를 꺼내어 최종적으로 반환 값을 얻을 때까지 체인의 다음 함수에 계속 전달합니다. 먼저 다음 코드를 살펴보세요.

코드 복사 코드는 다음과 같습니다.
function atarr(a, index){
var index=index||0,args = new Array(a.length - index)
for(var i in a){
if(i> =index) args[i -index]=a[i];
}
return args;
}
function m(scope,fn){
if(arguments.length<3 ) return fn.call(scope);
var p = atarr(arguments,2);
return function(){
var args = atarr(arguments)
return fn.apply(scope) ,p.concat(args ));
}
}

테스트 코드:

코드 복사 코드는 다음과 같습니다.
var plus = function(a,b){
return a b
}
var plus2 = m(null,plus) ,2);
console.log(plus2(10));
console.log(plus2(0))
//Result
12
2

이것이 우리의 목표입니다. 구현되었습니다. 위의 atarr 함수는 인수 객체의 지정된 위치에서 시작하는 매개변수를 꺼내어 배열에 저장합니다. m 함수는 이전에 정의된 작업을 완료하고 함수 체인에 매개변수를 저장하고 나머지 매개변수를 허용하는 함수를 반환합니다. 테스트 코드의 plus 함수는 원래 두 개의 매개변수 a와 b를 승인하고 a와 b의 합, 즉 int -> int -> int를 반환한 반면, plus2는 매개변수 b를 승인하여 2에 추가하여 반환했습니다. 2와 b의 합은 int -> int입니다.

위 작업 중 일부를 통해 javascript에서 Partial Application을 구현했고, Hitch2에서는 dojo 프레임워크에서 도메인 바인딩과 부분을 구현했습니다. 관심이 있으시면 소스 코드를 읽어보실 수 있습니다. 또한 매우 간단하고 명확합니다.
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿