国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript currying返回函數(shù)的函數(shù)

2024-05-06 14:12:55
字體:
供稿:網(wǎng)友
最早期的curry函數(shù)有點(diǎn)多態(tài)的意味,就是根據(jù)函數(shù)參數(shù)在內(nèi)部選用分支:
代碼如下:
//http://www.openlaszlo.org/pipermail/laszlo-user/2005-March/000350.html
// ★★On 8 Mar 2005, at 00:06, Steve Albin wrote:

function add(a, b) {

if (arguments.length < 1) {

return add;

} else if (arguments.length < 2) {

return function(c) { return a + c }

} else {

return a + b;

}

}



var myadd = add( 2 );

var total = myadd(3);


日本的一個(gè)先行者可能在未搞清arguments也能用Array的原生方法轉(zhuǎn)換為數(shù)組的時(shí)候,用非常復(fù)雜的正則與eval搞出一個(gè)更接近現(xiàn)代currying意味的函數(shù)。

代碼如下:
function curry(fun) {

if (typeof fun != 'function') {

throw new Error("The argument must be a function.");

}

if (fun.arity == 0) {

throw new Error("The function must have more than one argument.");

}

var funText = fun.toString();

var args = /function .*/((.*)/)(.*)/.exec(funText)[1].split(', ');

var firstArg = args.shift();

var restArgs = args.join(', ');

var body = funText.replace(/function .*/(.*/) /, "");

var curriedText =

"function (" + firstArg + ") {" +

"return function (" + restArgs + ")" + body +

"}";

eval("var curried =" + curriedText);

return curried;
}


[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]
接著是閉包的流行,與數(shù)組轉(zhuǎn)換arguments的技術(shù)的發(fā)現(xiàn),現(xiàn)代currying函數(shù)終于粉墨登場,就好像15~17世紀(jì)大航海時(shí)代的地理大發(fā)現(xiàn),javascript的世界突然間開闊了許多。
代碼如下:
//一個(gè)簡單的現(xiàn)代currying函數(shù)
function curry (fn, scope) {
var scope = scope || window;
var args = [];
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 桦川县| 堆龙德庆县| 栾川县| 江口县| 青州市| 潞西市| 惠来县| 徐水县| 玉树县| 宝山区| 夏邑县| 安图县| 清徐县| 桓台县| 息烽县| 莲花县| 博客| 麻阳| 内江市| 曲靖市| 兰考县| 泊头市| 潞西市| 岳普湖县| 衡山县| 伊宁市| 扎囊县| 潼南县| 忻城县| 吴堡县| 高平市| 噶尔县| 印江| 垣曲县| 宁波市| 桦甸市| 红原县| 桓台县| 余干县| 伽师县| 淮南市|