Javascript 从参数化模块调用函数。导出
引用时,我需要将一个参数传递到utils.js文件的module.exports中 在请求utils.js之后,我对如何调用sayHi感到有点困惑Javascript 从参数化模块调用函数。导出,javascript,node.js,Javascript,Node.js,引用时,我需要将一个参数传递到utils.js文件的module.exports中 在请求utils.js之后,我对如何调用sayHi感到有点困惑 我得到了TypeError:utils.sayHi不是一个函数。调用sayHi的正确方法是什么?首先创建一个名为module的变量 这不起任何作用,因为您正在模块的范围内执行此操作,因此该变量已经存在 然后将函数分配给module.exports 在另一个模块中,导入该函数并调用它 该函数的第一行表示: 模块是真实值吗 对。它是一个物体。如果不是,则
我得到了TypeError:utils.sayHi不是一个函数。调用sayHi的正确方法是什么?首先创建一个名为module的变量 这不起任何作用,因为您正在模块的范围内执行此操作,因此该变量已经存在 然后将函数分配给module.exports 在另一个模块中,导入该函数并调用它 该函数的第一行表示: 模块是真实值吗 对。它是一个物体。如果不是,则分配给module.exports将引发异常 因此,您永远不会覆盖module={};或者将sayHi函数分配给它 现在看看你提到的答案:
它在函数范围内创建了一个新变量,这样就不会与现有变量冲突。var模块的原因;在module.exports范围之外,如果多次引用,则尝试缓存模块。请参阅:。我可能在模块中有一个值不值得多次重新计算。只是我当前的实现似乎不起作用。@slider-正如答案所暗示的,您可以使用不同的变量名…但它会缓存传递给name参数的第一个名称,您将在后续调用中使用它。如果要正常缓存,则需要分别存储每个名称的结果。@但如果使用不同的名称调用导出的函数,则不需要缓存。在这种情况下,是的,对于值得缓存的内容,名称将是一个不好的参数。但其他值可能确实值得缓存。
// utils.js
var module;
module.exports = function (name) {
if (module) return module;
module = {};
module.sayHi = function () {
return `Hi, ${name}`;
};
return module;
};
// index.js
const utils = require("./utils")("Jim");
utils.sayHi();
var module;
if (module) return module;
module.exports = function (app, db) {
var module = {};