gpt4 book ai didi

javascript - 为什么 Array.prototype.slice(arguments, 2) 而不是初始化为空数组?

转载 作者:行者123 更新时间:2023-12-02 19:15:50 25 4
gpt4 key购买 nike

我正在尝试通过阅读 Fabric.js 的源代码来学习 Javascript。

在文件 util/lang_array.js 中,有一个如下所示的方法:

    var slice = Array.prototype.slice;

function invoke(array, method) {
var args = slice.call(arguments, 2), result = [ ];

for (var i = 0, len = array.length; i < len; i++) {
result[i] = args.length ? array[i][method].apply(array[i], args) : array[i][method].call(array[i]);
}
return result;
}

我不理解语句 var args = slice.call(arguments, 2)。让我困惑的特定部分是将 2 作为第二个参数传递(考虑 arguments[array, method] 然后是 arguments[2 ] 应为 null)。我查阅了 JS 引用资料,得出的结论是它基本上将 args 初始化为一个空数组。

那为什么不简单地var args = []呢?

谢谢。

最佳答案

这一行用于获取提供给函数的任何额外参数。

然后,这些额外的参数将传递给 .apply 调用中的指定方法。

注意:JS检查函数的形式参数。省略的参数将是未定义,额外的参数将(大部分)被忽略,但可以通过arguments伪数组获得。

我不确定为什么代码要费心检查 args.length 以查看是否调用 .apply.call - 它看起来像过早优化。

关于javascript - 为什么 Array.prototype.slice(arguments, 2) 而不是初始化为空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13141594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com