Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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_Arrays - Fatal编程技术网

有人能用JavaScript解释这个函数吗

有人能用JavaScript解释这个函数吗,javascript,arrays,Javascript,Arrays,我正在从一个在线图坦卡蒙学习javaScript中的调用和应用。此函数允许传递更多参数,而不是固定数量的参数 var calculate = function(){ var fn = Array.prototype.pop.apply(arguments); return fn.apply(null, arguments); }; 我很难理解的是这句话 var fn = Array.prototype.pop.apply(arguments); 图坦卡

我正在从一个在线图坦卡蒙学习javaScript中的调用和应用。此函数允许传递更多参数,而不是固定数量的参数

var calculate = function(){
        var fn = Array.prototype.pop.apply(arguments);
        return fn.apply(null, arguments);
    };
我很难理解的是这句话

var fn = Array.prototype.pop.apply(arguments);
图坦卡蒙大学的讲师解释如下:

我们正在将apply方法绑定到arguments对象上。这将为我们提供函数对象,并将其分配给fn变量。它还将从argumentsObject中删除函数对象。因为数组的pop方法获取数组中的最后一个元素,所以它将其从数组中移除,然后将其分配给曾经调用过的方法。在本例中,fn变量为

让我困惑的是:

我们正在将apply方法绑定到arguments对象上。这是 给我们函数对象

它还将从参数中删除函数对象 反对

当我们在返回语句中写入时:

 return fn.apply(null, arguments);

为什么要包含null?

传递给calculate的最后一个参数被假定为一个函数。它从参数列表中弹出。使用apply,因为参数不是实数组

此弹出函数fn与参数列表的其余部分一起调用。传递给计算的所有其他参数。参数列表不再包含fn,因为pop修改原始对象

之所以使用NULL,是因为调用fn时没有该值。看

例如,如果你调用计算

calculate(2, 3, function(a, b){ return a + b });

它将返回5。

传递给calculate的最后一个参数被假定为函数。它从参数列表中弹出。使用apply,因为参数不是实数组

此弹出函数fn与参数列表的其余部分一起调用。传递给计算的所有其他参数。参数列表不再包含fn,因为pop修改原始对象

之所以使用NULL,是因为调用fn时没有该值。看

例如,如果你调用计算

calculate(2, 3, function(a, b){ return a + b });
它将返回5。

根据:

语法 fun.applythisArg[argsArray]

参数 此参数: 这项服务的价值在于为《寻欢作乐》提供服务。请注意,这可能不是该方法看到的实际值:如果该方法是非严格模式代码中的函数,则null和undefined将替换为全局对象,原始值将被装箱

阿格萨雷: 一个类似数组的对象,指定应该调用fun的参数,或者如果不应该向函数提供参数,则为null或未定义。从ECMAScript 5开始,这些参数可以是类似于数组的通用对象,而不是数组。有关浏览器兼容性信息,请参见下文

根据:

语法 fun.applythisArg[argsArray]

参数 此参数: 这项服务的价值在于为《寻欢作乐》提供服务。请注意,这可能不是该方法看到的实际值:如果该方法是非严格模式代码中的函数,则null和undefined将替换为全局对象,原始值将被装箱

阿格萨雷: 一个类似数组的对象,指定应该调用fun的参数,或者如果不应该向函数提供参数,则为null或未定义。从ECMAScript 5开始,这些参数可以是类似于数组的通用对象,而不是数组。有关浏览器兼容性信息,请参见下文

Array.prototype.pop.applyarguments

当您有一个函数时,会自动出现一个arguments对象,它是一个类似数组的arguments对象。如果调用此假函数:

someFunction('hello', 'world');
有些函数如下所示:

function someFunction() {
    console.log(arguments);
}
function() { ... }
console.log将输出['hello','world']。但是,不要困惑。。。那不是数组对象!它是一个类似数组的对象。因此,你不能说论点。流行音乐。。。因为参数没有该方法,所以它属于Array.prototype。但是,普通数组对象确实可以访问Array.prototype,例如[1,2,3].pop/=>[1,2]

当你说.apply时,第一个参数是上下文。。。它设定了这个目标。实际上,Array.prototype.pop.applyarguments是一种模仿arguments.pop的聪明方法。但是您不能执行arguments.pop,因为它没有pop方法

作为返回fn.applynull,参数;,null是第一个参数,因为我们不需要为此示例设置新上下文。arguments是第二个参数,因为它被传入以与fn一起使用

.apply返回一个函数对象,因此它返回如下内容:

function someFunction() {
    console.log(arguments);
}
function() { ... }
然后我们可以稍后调用该函数

顺便说一句,.pop在本例中对原始对象进行了变异,即类似数组的对象参数。因此,您正在将参数传递给fn,但它缺少了前面的最后一项。

Array.prototype.pop.applyarguments

当您有一个函数时,会自动出现一个arguments对象,它是一个类似数组的arguments对象。如果调用此假函数:

someFunction('hello', 'world');
还有someFunc 这看起来是这样的:

function someFunction() {
    console.log(arguments);
}
function() { ... }
console.log将输出['hello','world']。但是,不要困惑。。。那不是数组对象!它是一个类似数组的对象。因此,你不能说论点。流行音乐。。。因为参数没有该方法,所以它属于Array.prototype。但是,普通数组对象确实可以访问Array.prototype,例如[1,2,3].pop/=>[1,2]

当你说.apply时,第一个参数是上下文。。。它设定了这个目标。实际上,Array.prototype.pop.applyarguments是一种模仿arguments.pop的聪明方法。但是您不能执行arguments.pop,因为它没有pop方法

作为返回fn.applynull,参数;,null是第一个参数,因为我们不需要为此示例设置新上下文。arguments是第二个参数,因为它被传入以与fn一起使用

.apply返回一个函数对象,因此它返回如下内容:

function someFunction() {
    console.log(arguments);
}
function() { ... }
然后我们可以稍后调用该函数


顺便说一句,.pop在本例中对原始对象进行了变异,即类似数组的对象参数。因此,您正在将参数传递给fn,但它缺少了以前在其中的最后一项。

此代码不验证我在应用中调用它的任何方式,第一个参数是此上下文。在Array.prototype.pop.applyarguments中,使用参数作为上下文,参数是类似于数组的对象,而不是实际的数组对象。这是因为您不能执行arguments.pop,因为arguments不共享Array.prototype。。。它实际上不是数组对象,所以在第一个应用程序中,不需要第二个参数。但是,在fn.applynull的arguments中,您将传入null作为第一个参数,因为不需要上下文。但是,您可以将参数作为第二个参数传入,因为它可以被函数使用。我不知道为什么人们总是关闭这个问题…参数是伪数组,在它上面调用pop get last element=函数,然后在其余参数上运行它。计算1,2,3,4,5,函数{console.logarguments;};这段代码不验证我调用它的任何方式。在apply中,第一个参数是这个上下文。在Array.prototype.pop.applyarguments中,使用参数作为上下文,参数是类似于数组的对象,而不是实际的数组对象。这是因为您不能执行arguments.pop,因为arguments不共享Array.prototype。。。它实际上不是数组对象,所以在第一个应用程序中,不需要第二个参数。但是,在fn.applynull的arguments中,您将传入null作为第一个参数,因为不需要上下文。但是,您可以将参数作为第二个参数传入,因为它可以被函数使用。我不知道为什么人们总是关闭这个问题…参数是伪数组,在它上面调用pop get last element=函数,然后在其余参数上运行它。计算1,2,3,4,5,函数{console.logarguments;};