网站查询信息,中国优秀设计网站有哪些,广州网站设计公司哪家好,网站建设参考文献资料定义一个函数#xff0c;以闭包的方式内部函数调用外部函数,并返回内部函数 
function calc(n){  //args是获取的第一次参数的值let argsArray.prototype.slice.call(arguments)// 上面的args写法等同于下方的for循环// for (var i  0; i  arguments.length; i) {//     A…定义一个函数以闭包的方式内部函数调用外部函数,并返回内部函数 
function calc(n){  //args是获取的第一次参数的值let argsArray.prototype.slice.call(arguments)// 上面的args写法等同于下方的for循环// for (var i  0; i  arguments.length; i) {//     Array.prototype.push(arguments[i]);// }function inner(){//innerArgs是获取 calc(参数)结果再一次调用的(参数)就是调用再调用后续括号的参数let innerArgsArray.prototype.slice.call(arguments)console.log(innerArgs);//拼接两个数组argsargs.concat(innerArgs)return inner;//方法}//给inner加个方法inner.calcCountfunction(){return args.reduce(function(sum,n){return sumn;},0)} //返回函数return inner;
}    其基本原理就类似 for循环遍历原数组根据start和end的值再复制一份到新数组并返回。所以当我们使用[].slice.call(arguments)slice方法内部的this就会被替换成arguments并循环遍历arguments复制到新数组返回这样就得到了一个复制arguments类数组的数组对象 let argsArray.prototype.slice.call(arguments)以柯里化方式调用 
var funccalc(40);
var functotalfunc(50)(60,78,80)
console.log(functotal.calcCount()); 剖析获取柯里化参数值 var funccalc(40) 对应的外部函数args获取参数值 var functotalfunc(50)(60,78,80) 对应的内部innerArgs获取函数值 最后内部函数执行return inner将函数返回出去外部函数执行return inner将函数返回出去 目的是垃圾回收函数执行