apply如何与接受逗号分隔参数的函数一起工作?

问题描述 投票:2回答:2

好吧,如果你这样做我就明白了。

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

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

[1, 2, 3, 4]

这背后的逻辑是 [1, 2] 被设置为... 这个 对象上,将用[3,4]调用push。

如果我们说应用是。

fun.apply(thisArg, [argsArray])

那么 趣味推动, 这个Arg[1, 2][argsArray][3, 4]

所以,对我来说,这几乎等同于。

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

但是,"推 "需要的是 逗号分隔的值 而非 阵列阵列式 对象。apply是如何实现的呢?

根据这个。http:/rusticode.com20120815javascript-call-and-apply。任何其他接受逗号分隔值的函数都可以用apply来代替,做一些类似于我上面的例子,比如。

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

不幸的是,没有任何解释

apply到底是如何与接收逗号分隔参数的函数一起工作的?

javascript arrays csv push apply
2个回答
1
投票

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

因此,你在第一个例子中所做的事情相当于

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

它是 相当于叫 [1, 2].push([3, 4]); 如果是这样,结果将是一个数组,里面嵌套着另一个数组。

[1, 2, [3, 4]]

那里 如意算盘 apply 正在做。这就是所谓的 call:

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

0
投票

Function.prototype.apply(thisArg, [ argsArray]) 需要 thisArg 为首 所需 参数和一个可选的第二个参数作为数组。

它的作用是返回调用函数的结果和指定的 thisArg 和可选的 argsArray 数组。

但是等一下,第二个参数是一个类似数组的对象,但它是指定调用函数的参数。

所以对于你的例子 Array.prototype.push.apply([1, 2], [3, 4]),调用函数是 push 的参数,并将其推送至 this 阵列和 this 指数组 [1, 2]. 所以这个例子的工作原理是

[1, 2].push(3, 4) // output: [1, 2, 3, 4]

但是..,

[1, 2].push([3, 4]) // output: [1, 2, [3, 4]]

对于你的第二个例子。Math.max.apply(null, [1, 2, 3, 4, 5, 6, 7]);thisArgnull 因为你调用的是 Math. 这不允许外部 this 来执行任何任务。所以这个例子的工作原理是这样的。

Math.max(1, 2, 3, 4, 5, 6, 7) // output: 7

希望对你有帮助

© www.soinside.com 2019 - 2024. All rights reserved.