JavaScript 中的一组参数是否可以同时调用两个函数?
Is it possible to call two functions at the same time with one set of arguments in JavaScript?
出于纯粹的懒惰,并且知道这对性能没有任何影响,是否可以一次调用两个函数。
例如,这里是一些伪代码:
function custom_log(string) {
// important custom logging stuff...
console.log(string);
}
(console.log && custom_log)("Hello World.");
这是否可能,如果可能的话如何?
不,你不能说 "here are two functions, here's one set of arguments, call them both with the same arguments"。但是您可以在变量中预先定义参数并将其传递给两个函数,如果您对参数使用对象解构,这可能是最简洁的:
function custom_log({output, errorVal}) {
console.log(output);
console.error(errorVal);
}
const args = {
output: 'Hello, world',
errorVal: 'Some error happened'
};
console.log(args);
custom_log(args);
您也可以只创建一个辅助函数来遍历传递的函数数组并调用它们:
function callAllWith(functionList, ...args) {
functionList.forEach(fn => fn(...args));
}
callAllWith([console.log, custom_log], 'Hello, world!');
在任何并行处理意义上都不是 "simultaneous",不是。
但是,是的,您可以轻松编写一个接受多个函数的高阶函数并创建一个您只需调用一次的新函数:
function atOnce(...fns) {
return function(...args) {
for (const fn of fns)
fn.apply(this, args);
};
}
atOnce(console.log, custom_log)("Hello World");
*** 只需组合两者的代码并使用一个函数使用新的 lightOn() 我将用于切换的代码合并到其中。所有功能 运行 按顺序进行,因此最好将它们 运行 放在同一块中。
出于纯粹的懒惰,并且知道这对性能没有任何影响,是否可以一次调用两个函数。
例如,这里是一些伪代码:
function custom_log(string) {
// important custom logging stuff...
console.log(string);
}
(console.log && custom_log)("Hello World.");
这是否可能,如果可能的话如何?
不,你不能说 "here are two functions, here's one set of arguments, call them both with the same arguments"。但是您可以在变量中预先定义参数并将其传递给两个函数,如果您对参数使用对象解构,这可能是最简洁的:
function custom_log({output, errorVal}) {
console.log(output);
console.error(errorVal);
}
const args = {
output: 'Hello, world',
errorVal: 'Some error happened'
};
console.log(args);
custom_log(args);
您也可以只创建一个辅助函数来遍历传递的函数数组并调用它们:
function callAllWith(functionList, ...args) {
functionList.forEach(fn => fn(...args));
}
callAllWith([console.log, custom_log], 'Hello, world!');
在任何并行处理意义上都不是 "simultaneous",不是。
但是,是的,您可以轻松编写一个接受多个函数的高阶函数并创建一个您只需调用一次的新函数:
function atOnce(...fns) {
return function(...args) {
for (const fn of fns)
fn.apply(this, args);
};
}
atOnce(console.log, custom_log)("Hello World");
*** 只需组合两者的代码并使用一个函数使用新的 lightOn() 我将用于切换的代码合并到其中。所有功能 运行 按顺序进行,因此最好将它们 运行 放在同一块中。