函数柯里化 剖析
2023-12-15 18:00:56
定义一个函数,以闭包的方式内部函数调用外部函数,并返回内部函数
function calc(n){
//args是获取的第一次参数的值
let args=Array.prototype.slice.call(arguments)
// 上面的args写法等同于下方的for循环
// for (var i = 0; i < arguments.length; i++) {
// Array.prototype.push(arguments[i]);
// }
function inner(){
//innerArgs是获取 calc(参数)=>结果再一次调用的(参数),就是调用再调用后续括号的参数
let innerArgs=Array.prototype.slice.call(arguments)
console.log(innerArgs);
//拼接两个数组
args=args.concat(innerArgs)
return inner;//方法
}
//给inner加个方法
inner.calcCount=function(){
return args.reduce(function(sum,n){
return sum+n;
},0)
}
//返回函数
return inner;
}
其基本原理就类似 for循环遍历原数组,根据start和end的值再复制一份到新数组并返回。所以当我们使用[].slice.call(arguments),slice方法内部的this就会被替换成arguments,并循环遍历arguments,复制到新数组返回,这样就得到了一个复制arguments类数组的数组对象
let args=Array.prototype.slice.call(arguments)
以柯里化方式调用
var func=calc(40);
var functotal=func(50)(60,78,80)
console.log(functotal.calcCount());
?剖析获取柯里化参数值
var func=calc(40)
对应的外部函数args获取参数值
var functotal=func(50)(60,78,80)
对应的内部innerArgs获取函数值
最后内部函数执行return inner,将函数返回出去,外部函数执行return inner将函数返回出去
目的是垃圾回收函数执行
文章来源:https://blog.csdn.net/qq_41429765/article/details/135017113
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!