Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
试图理解Javascript中参数数组的概念_Javascript_Callback - Fatal编程技术网

试图理解Javascript中参数数组的概念

试图理解Javascript中参数数组的概念,javascript,callback,Javascript,Callback,我知道参数在每个函数中都是类似数组的对象,但我不确定我们为什么需要它以及如何使用它?下面是一个让我困惑的例子 那么,为什么我们不能简单地将var args=[]放在参数上,而使用切片呢 (我不确定这是否是一个很好的例子来解释Arumings,但我也试图理解apply()在这里是如何工作的…) 此代码将获取前2个参数之后的任何参数,并将它们放入新数组中。如果将其设置为空数组,则除了指定的参数外,不会传递任何参数 考虑以下两个代码段之间的差异: var slice=Array.prototype.

我知道参数在每个函数中都是类似数组的对象,但我不确定我们为什么需要它以及如何使用它?下面是一个让我困惑的例子

那么,为什么我们不能简单地将var args=[]放在参数上,而使用切片呢

(我不确定这是否是一个很好的例子来解释Arumings,但我也试图理解apply()在这里是如何工作的…)


此代码将获取前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);