javascript 链式函数运行
来源:互联网 发布:oppo手机数据自动打开 编辑:程序博客网 时间:2024/05/18 03:46
多个执行参函数
本文不讲解其中原理,只是作为笔记,记录代码,其中特性请自行百度:
编写一个add函数
add(2)(3)(4) //输出9
- 方法一
function add(x) { var sum = x; var tmp = function (y) { sum = sum + y; return tmp; }; tmp.toString = function () { return sum; }; return tmp;}console.log(add(1)(2)(3)); //6console.log(add(1)(2)(3)(4)); //10
- 方法二
function add(num){ var sum=0; sum= sum+num; return function tempFun(numB){ if(arguments.length===0){ return sum; }else{ sum= sum+ numB; return tempFun; } }}
调用时和前面的有点区别
var result=add(2)(3)(4)(5)();console.log(result);//输出14
- 方法三
function add(num){ var sum=0; sum= sum+num; var tempFun=function(numB){ if(arguments.length===0){ return sum; }else{ sum= sum+ numB; return tempFun; } } tempFun.valueOf=function(){ return sum; } tempFun.toString=function(){ return sum+''; } return tempFun;}
var result=add(2)(3)(4)(5);console.log(+result);//输出14 valueOfconsole.log(result);//输出14 toString
- 方法四
var add=(function(){ var args=[]; function addInner(){ if(arguments.length===0){ return calResult; }else{ Array.prototype.push.apply(args,Array.prototype.splice.call(arguments,0)); return add; } } function calResult(){ var result=args.reduce(function(previousValue, currentValue){ return previousValue+currentValue; },0); args=[]; return result; } addInner.valueOf=function(){ return calResult(); }; addInner.toString=function(){ return calResult()+''; }; return addInner;}());console.log('%d',add(1)(2)(3)(4));
- 方法五
参数分多次传递这个操作叫curry.. 把curry和最后那个函数解耦的写法可以这样写
var curry = function(final, arity) { var curried = function() { // this是每次的参数列表 // 每次slice()保证curry后的函数仍然是无状态的 var new_args = this.slice(); for(arg_key in arguments) { new_args.push(arguments[arg_key]); } if (new_args.length >= arity) { return final.apply(null, new_args); } else { return curried.bind(new_args); } }; return curried.bind([]);};var sum4 = function(a,b,c,d) { return a+b+c+d; };var curried = curry(sum4, sum4.length);console.log(curried(1,2,3)(4));// -> 10console.log(curried(1)(2,3)(4));// -> 10
- 方法六
function curry(fn) { var slice = [].slice; var len = fn.length; return function curried() { var args = slice.call(arguments); if (args.length >= len) { return fn.apply(null, args); } return function () { return curried.apply(null, args.concat(slice.call(arguments))); }; };}var add = curry(function (a, b, c, d) { return a + b + c + d;});console.log(add(1)(2)(3)(4)); // 10console.log(add(1, 2, 3)(4)); // 10console.log(add(1)(2, 3)(4)); // 10
- 方法七
function add(x) { var sum = x; var tmp = function (y) { sum = sum + y; return tmp; }; tmp.toString = function () { return sum; }; return tmp;}console.log(add(1)(2)(3)); //6console.log(add(1)(2)(3)(4)); //10
- 方法八
最短,且没用任何中间变量
function add(n) { var fn = function(m) { return add(n + m); }; fn.valueOf = function() { return n; }; fn.toString = function() { return '' + n; }; return fn;}
1 0
- javascript 链式函数运行
- JavaScript 中函数自运行
- Javascript 链式作用域
- Javascript实现链式栈
- javascript 链式栈
- JavaScript链式调用计算器
- JavaScript之链式运动
- JavaScript链式调用
- 用fork()函数产生“进程栈”或者“链式进程”代码,可运行
- iOS 链式函数使用
- 如何提升JavaScript函数的运行速度
- 如何提升JavaScript函数的运行速度
- 页面加载时就运行javascript函数
- JavaScript 以及javaquery 函数自动加载运行
- JavaScript链式调用的设计
- javascript方法的链式调用
- Javascript原型链式模型分析
- JavaScript 动画之链式运动
- LeetCode 58. Length of Last Word
- Team Wiki
- STM32学习-RTC实时时钟
- Window与WMS通信过程
- 通过进程ID得到进程名
- javascript 链式函数运行
- EPIPE和ECONNRESET
- Hadoop2.7.2的eclipse插件编译
- 用jstack诊断java应用故障
- 关于"没有找到MFC80UD.DLL,因此这个程序未能启动.重新安装应用程序可能会修复此问题"的解决方案
- android studio上非常好用的快捷键
- CSS定位
- 回溯法求解数独的全部解
- java中常用的一些方法(一)