是否可以使用“call”或“apply”将参数数组一次传递给多个函数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以使用“call”或“apply”将参数数组一次传递给多个函数?相关的知识,希望对你有一定的参考价值。

例如,假设我有两个函数,abab都使用两个string参数,然后将这些字符串记录到控制台:

function a(w, x) {
  console.log(w, x);
}

function b(y, z) {
  console.log(y, z);
}

是否可以使用ab调用callapply来同时向两个函数传递一个参数数组?

例如,这是一些伪代码:

(a, b).apply(window, ["Wello", "Horld"]);

是否有可能在不使用循环或执行此操作的情况下实现此目的:

var args = ["Wello", "Horld"];
a.apply(window, args);
b.apply(window, args);

此外,是否可以一次调用两个以上的函数?

注意:这些功能可以按任何顺序运行。

谢谢。

答案

是否可以使用call或apply调用a和b一次将一个参数数组传递给两个函数?

...

是否有可能在不使用循环或做某事的情况下实现这一点......

不。你必须做你所描述的,要么将参数放在数组中并进行每次调用,要么循环遍历函数数组等。

例如:

for (const f of [a, b]) {
    f.apply(window, ["Wello", "Horld"]);
    // Or if you have the arguments as discrete things like that, I'd use call:
    //f.call(window, "Wello", "Horld");
}
另一答案

您仍然需要对函数进行一些迭代,将函数转换为数组并使用Function#apply调用它们。

function a(w, x) {
    console.log(w, x);
}

function b(y, z) {
    console.log(y, z);
}

[a, b].forEach(fn => fn.apply(window, ["Wello", "Horld"]));
另一答案

你需要使用某种循环。

const args = ["Wello", "Horld"];
[a, b].forEach(f => f.apply(Windows, args));

会做的伎俩。这适用于您想要的功能。

以上是关于是否可以使用“call”或“apply”将参数数组一次传递给多个函数?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 中 call()apply()bind() 的用法

原生JS实现call,apply,bind函数

this -- apply或call调用

js中的apply与call的用法与区别

手写apply()

Javascript中call和apply的区别与详解