试图理解Javascript中参数数组的概念
我知道参数在每个函数中都是类似数组的对象,但我不确定我们为什么需要它以及如何使用它?下面是一个让我困惑的例子 那么,为什么我们不能简单地将var args=[]放在参数上,而使用切片呢 (我不确定这是否是一个很好的例子来解释Arumings,但我也试图理解apply()在这里是如何工作的…)试图理解Javascript中参数数组的概念,javascript,callback,Javascript,Callback,我知道参数在每个函数中都是类似数组的对象,但我不确定我们为什么需要它以及如何使用它?下面是一个让我困惑的例子 那么,为什么我们不能简单地将var args=[]放在参数上,而使用切片呢 (我不确定这是否是一个很好的例子来解释Arumings,但我也试图理解apply()在这里是如何工作的…) 此代码将获取前2个参数之后的任何参数,并将它们放入新数组中。如果将其设置为空数组,则除了指定的参数外,不会传递任何参数 考虑以下两个代码段之间的差异: var slice=Array.prototype.
此代码将获取前2个参数之后的任何参数,并将它们放入新数组中。如果将其设置为空数组,则除了指定的参数外,不会传递任何参数 考虑以下两个代码段之间的差异:
var slice=Array.prototype.slice;
功能测试(a、b){
var args=slice.call(参数,2);
console.log(args);
}
测试(1,2,3,4)
.apply()
允许您在指定两种不同内容时调用函数:
此指针的值
.call()
,如果参数数量事先未知,则通常会使用.apply()
,因此参数位于数组中或可以放入数组中
在您展示的代码示例中,slice()
可能是Array.prototype.slice
,因此代码示例将获取前两个参数之后的参数集,并将它们放入自己的数组中,以便将它们传递给原始函数
Javascript中的参数
对象是“类似数组的”。它有一个.length
属性,并且像数组一样为零索引,但它没有任何数组方法。因此,如果要在其上使用数组方法,如.slice()
将某些元素复制到新数组,则必须从数组原型中手动指定数组方法,而不是直接在arguments对象上使用.slice()
所以,如果你打电话:
function myFunc(a, b, c, d) {
// four arguments present here
}
_.delay(myFunc, 100, 1, 2, 3, 4);
..delay()
的内部工作将跳过传递给它的前两个参数(因为它们直接用于..delay()
中),只获取剩余的最后四个参数,然后使用.apply()
将它们传递给回调函数
下面是一个工作片段示例:
var{};
var slice=Array.prototype.slice;
_.delay=函数(func,wait){
var args=slice.call(参数,2);
返回setTimeout(函数(){
函数应用(空,参数);
},等等);
};
函数myFunc(){
log(“传递给myFunc()的参数数:”+arguments.length);
log(JSON.stringify(slice.call(arguments));
}
_.延迟(myFunc,500,1,2,3,4)
函数日志(x){
var div=document.createElement(“div”);
div.innerHTML=x;
文件.正文.附件(div);
}
但如果我将其设置为空数组,为什么不能传入其他参数?@Danny,因为arguments对象中可能有更多参数,这些参数将包含在切片数组中。空数组永远不会包含它们。
function myFunc(a, b, c, d) {
// four arguments present here
}
_.delay(myFunc, 100, 1, 2, 3, 4);