javascript - apply 如何与采用逗号分隔参数的函数配合使用?

标签 javascript arrays csv push apply

好的,所以我理解您是否这样做:

Array.prototype.push.apply([1, 2], [3, 4])

它基本上会连接 apply 中的第一个数组:

[1, 2, 3, 4]

这背后的假设逻辑是 [1, 2] 设置为 this 对象,在该对象上将使用 [3, 4] 调用推送。

如果我们说应用是:

fun.apply(thisArg, [argsArray])

那么fun就是pushthisArg就是[1, 2][argsArray] [3, 4]

所以对我来说,这几乎相当于:

[1, 2].push([3, 4])

但是,push 接受逗号分隔值,而不是数组类似数组对象。 apply 是如何做到这一点的?

据此:http://rusticode.com/2012/08/15/javascript-call-and-apply/ ,任何其他接受逗号分隔值的函数都可以使用 apply 来调用,以执行与上面的示例类似的操作,例如:

var max = Math.max.apply(null, [1, 2, 3, 4, 5, 6, 7]); //max = 7

不幸的是,没有任何解释。

apply 到底如何与采用逗号分隔参数的函数一起工作?

最佳答案

Function.prototype.apply 通过将第二个参数(必须是数组或类似数组)的每个元素作为单独的参数传递给函数来调用指定的函数。

所以你在第一个例子中所做的相当于

[1, 2].push(3, 4);

相当于调用[1, 2].push([3, 4]);如果是这样,结果将是一个带有另一个数组的数组嵌套在其中的数组:

[1, 2, [3, 4]]

有一个方法可以完成您认为 apply 正在做的事情。这称为调用:

Array.prototype.push.call([1, 2], [3, 4]);

关于javascript - apply 如何与采用逗号分隔参数的函数配合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33640817/

相关文章:

javascript - 如何使用 vue $watch 获取数组内对象属性的变化?

javascript - 数组的内部*当前值*

java - 问题 - For 循环仅填充二维数组的第一个位置而不是整个二维数组

python - NVD - 使用 Python 将 JSON 转换为 CSV

php - 在mysql中导入数据时自动插入列

javascript - 我怎样才能让一个垂直的div在全屏时变成水平的

javascript - 如何使用 JQuery 延迟 10 秒一个接一个地删除每个列表项?

python - 如何根据两个数组的条件创建一个新数组?

java - 数组中玩家的位置

R::在r中将字符串从 "x,y"反转为 "y,x"