Javascript 如何通过一个“run()”,一次运行所有具有相应参数的函数?
如果我有两个文件 文件1Javascript 如何通过一个“run()”,一次运行所有具有相应参数的函数?,javascript,node.js,Javascript,Node.js,如果我有两个文件 文件1 exports.run = () => { console.log(test.property, test2.property, etc.property) }; exports.info = { name : "test" } 文件2 const fs = require('fs'); let test; let test2; let etc; test.property = "test"; test2.
exports.run = () => {
console.log(test.property, test2.property, etc.property)
};
exports.info = {
name : "test"
}
文件2
const fs = require('fs');
let test;
let test2;
let etc;
test.property = "test";
test2.property = "test2";
etc.property = "etc";
let functions = new Map();
fs.readdir('./', (err, files) => {
if (err) console.error(err);
files.forEach(f => {
let props = require(`./${f}`);
functions.set(props.info.name, props);
});
});
functions.get("test").run()
现在,我需要在文件1中手动添加每个变量作为参数,在文件2中,我需要手动通过
.run()
传递每个变量。这既单调又烦人,因此我是否可以只对.run()
进行作用域,以便它使用所有当前变量?我不确定这是否是您想要的代码
const args = {
foo: ["a", "b"],
bar: ["c", "d", "e"]
}
const map = new Map();
function Foo(first, second) {
console.log(first, second)
}
function Bar(first, second, third) {
console.log(first, second, third)
}
map.set("foo", Foo);
map.set("bar", Bar);
function run() {
for(const key of map.keys()) {
const func = map.get(key);
func.apply(undefined, args[key])
}
}
run();
// output
// a b
// c d e
关键点是
apply
函数,它可以调用一个函数引用,其参数为apply
的参数。您可以在应用的MDN上查看更多信息我试图理解您的代码,但我无法理解您的目的。我有很多函数,我喜欢有多个文件,因为它更简单,更有条理,我把所有的函数都放在一个映射中,这样就不那么复杂了,因为我有很多函数,但每次调用它们时,我都必须传递参数。如果所有这些函数都可以像我在主代码中定义的函数一样定义其作用域,那么会容易得多,那么有没有办法做到这一点呢?我在这里试图理解您的用例;因此,您有多个模块,每个模块上都有一些函数,您正试图将值从主脚本传递到这些模块中的每一个?范围只是一个变量容器。知道还有什么是变量容器吗?一个物体!只需将所有要传递参数的内容放在一个对象中,并将该对象传递给函数即可。这样,您就可以自由添加或删除变量,而无需在多个位置进行更改。Omg,apply
。你是救命恩人,很乐意解决你的问题。顺便说一句,你的问题代码有误导性,你应该说清楚,也就是说,没有关于文件和模块的内容。它不起作用,我觉得它与多个文件有关。如果我不使用模块.exports.run
或exports.run
它可以正常工作,但一旦我使用了它们,它就会停止工作:(什么是多个文件,你是说多个模块中有许多函数吗?你可以修改你的问题代码,让我更容易理解,并记住把代码弄清楚,就像我给你发的一样。@newbie程序员?