JavaScript:不确定如何调用和应用与这个函数中的参数对象相关
JavaScript: unsure how call and apply relate to the arguments object in this function
抽象地说,我完全明白发生了什么。这是为传递给calculate
对象的函数提供无限数量的参数的好方法。
var calculate = function(){
var fn = Array.prototype.pop.apply(arguments);
return fn.apply(null, arguments);
},
sum = function(x,y){
return x + y;
},
diff = function(x,y){
return x - y;
};
这似乎是函数的关键。我们在这里使用apply
方法来允许arguments
对象具有Array prototype
的pop
方法
我不清楚的是……
TUT说这将给我们Function
对象并将其分配给fn
变量,它还将从arguments
对象中删除Function
对象,因为pop
方法。(pop
方法删除数组的最后一项,并将其分配给曾经调用过pop方法的对象)在本例中是fn
变量。我们最终得到一个arguments
对象,它不再有一个函数对象,它只有所有的数值
var fn = Array.prototype.pop.apply(arguments);
return fn.apply(null, arguments);
最近,我开始意识到也许我的误解是我看到fn
变量只是,而不是最终将传递到calculate
对象的函数。
提前感谢你帮助我理解这一点!!
这是apply:
的语法function.apply(thisArg, [argsArray])
用calculate on sum:
calculate(10, 15, sum);
内部计算:
在开始- arguments = [10, 15, sum];
注意参数不是一个数组,而是一个类似对象的数组-使用数组表示法更容易
var fn = Array.prototype.pop.apply(arguments);
Arguments不是一个数组,所以它没有pop方法,我们从数组原型中获取pop方法并在参数上运行它-这意味着我们使用参数作为.pop()
的'this' prop。这将返回参数的最后一个形参,它应该是函数(在本例中是sum)。
After pop - arguments = [10, 15];
现在我们接受参数并使用.apply(thisArg, [argsArray])
方法的第二部分- argsArray。
在fn.apply(null, arguments)
thisArg = null(没有关系,因为函数sum不使用这个),现在apply将参数分配给'数组'顺序的参数- x(第1)= 10,y(第2)= 15,并运行函数
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用闭包共享构造函数参数
- 函数参数的值错误
- 当一个重要的构造函数参数丢失时应该发生什么
- 阻止ReSharper将JavaScript函数参数放到新行中
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 使构造函数参数具有ES6类方法的特权
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- Windows.Networking.EndpointPair构造函数参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 大括号中的Javascript函数参数
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 将JSON字符串转换为函数参数
- eval()读取函数参数有多糟糕
- Javascript不能在一个命令中使用函数参数
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- ES6类构造函数参数
- 是否可以在javascript函数参数列表中调用多个函数