>웹 프론트엔드 >JS 튜토리얼 >JavaScript 함수 커링에 대한 자세한 설명

JavaScript 함수 커링에 대한 자세한 설명

PHP中文网
PHP中文网원래의
2017-04-01 15:08:012168검색

커링이란

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

Ke Lihua 함수 아이디어: js 전처리 아이디어로 함수 실행을 사용하여 파괴되지 않는 범위를 형성하는 원리; , 파기되지 않은 이 범위에 전처리해야 하는 모든 콘텐츠를 저장하고 작은 함수를 반환합니다. 이제부터 작은 함수에서는 이전에 저장된 항목에 대해 관련 작업을 수행할 수 있습니다.

커링 함수는 주로 전처리 역할을 합니다.

바인드 메서드의 역할: 통과 in 콜백 메소드에서

바인드 메소드 구현 원칙 1 코드는 다음과 같습니다.

/**
* bind方法实现原理1
* @param callback [Function] 回调函数
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
function bind(callback,context) {
var outerArg = Array.prototype.slice.call(arguments,2);
// 表示取当前作用域中传的参数中除了fn,context以外后面的参数;
return function (){
var innerArg = Array.prototype.slice.call(arguments,0);//表示取当前作用域中所有的arguments参数;
callback.apply(context,outerArg.concat(innerArg));
}
}

다음 코드 조각은 프로토타입 체인의 바인딩 구현 원리를 모방합니다

/**
* 模仿在原型链上的bind实现原理(柯理化函数思想)
* @param context [Object] 上下文
* @returns {Function} 改变this指向的函数
*/
Function.prototype.mybind = function mybind (context) {
var _this = this;
var outArg = Array.prototype.slice.call(arguments,1);
// 兼容情况下
if('bind' in Function.prototype) {
return this.bind.apply(this,[context].concat(outArg));
}
// 不兼容情况下
return function () {
var inArg = Array.prototype.slice.call(arguments,0);
inArg.length === 0?inArg[inArg.length]=window.event:null;
var arg = outArg.concat(inArg);
_this.apply(context,arg);
}
}

커링 함수(Currying)

컴퓨터 과학에서 커링은 여러 매개변수를 받는 함수를 단일 매개변수(원래 함수의 첫 번째 매개변수)를 받는 함수로 변환하고, 나머지 매개변수를 받아 결과를 반환하는 새로운 함수를 반환하는 기술이다. 🎜>

커링이란 간단한 기능을 얻기 위해 특정 매개변수를 미리 전달하는 것입니다. 하지만 미리 전달된 매개변수는 클로저에 저장되기 때문에 몇 가지 특이한 특징이 있을 것입니다. 예:

예:

var adder = function(num) {
return function(y) {
return num + y;
}
}
var inc = adder(1);
var dec = adder(-1);
//inc, dec现在是两个新的函数,作用是将传入的参数值(+/-)1
alert(inc(99));//100
alert(dec(101));//100
alert(adder(100)(2));//102
alert(adder(2)(100));//102
위는 JavaScript 함수 커링에 대한 자세한 설명입니다. 자세한 내용은 PHP 중국어 웹사이트(m.sbmmt.com)를 참고하세요. )!


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