【问题标题】:Is it possible to use the "call" or "apply" to pass the an array of arguments to multiple functions at once?是否可以使用“调用”或“应用”一次将参数数组传递给多个函数?
【发布时间】:2019-04-14 14:43:53
【问题描述】:

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

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

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

是否可以使用callapply 调用a b 以同时将一组参数传递给两个函数?

例如,下面是一些伪代码:

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

是否可以在不使用循环或执行以下操作的情况下实现这一点:

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

另外,是否可以同时调用两个以上的函数?

注意:函数可以按任意顺序运行。

谢谢。

【问题讨论】:

  • JavaScript 只有一个执行线程。考虑“同时”运行两个函数是没有意义的。
  • @Pointy 仅当它们不是异步的。
  • @Lux ??没关系。
  • 所以您问是否有某种方法可以开始执行 sequence 函数调用?对我来说,“一次”意味着“同时”。
  • @Pointy 2 个异步函数可能正在同时执行。当然没有 2 个 JS 语句可以并行,但是如果一个函数正在等待另一个函数可以运行,最终意味着两者同时处于活动状态。协同多任务的定义。

标签: javascript function call apply


【解决方案1】:

是否可以使用 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");
}

【讨论】:

    【解决方案2】:

    您可能仍需要对函数进行一些迭代,方法是将函数放入一个数组并使用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"]));

    【讨论】:

      【解决方案3】:

      你需要使用某种循环。

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

      会成功的。这适用于您想要的尽可能多的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-26
        • 2011-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 2020-04-03
        • 1970-01-01
        相关资源
        最近更新 更多