Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从参数化模块调用函数。导出_Javascript_Node.js - Fatal编程技术网

Javascript 从参数化模块调用函数。导出

Javascript 从参数化模块调用函数。导出,javascript,node.js,Javascript,Node.js,引用时,我需要将一个参数传递到utils.js文件的module.exports中 在请求utils.js之后,我对如何调用sayHi感到有点困惑 我得到了TypeError:utils.sayHi不是一个函数。调用sayHi的正确方法是什么?首先创建一个名为module的变量 这不起任何作用,因为您正在模块的范围内执行此操作,因此该变量已经存在 然后将函数分配给module.exports 在另一个模块中,导入该函数并调用它 该函数的第一行表示: 模块是真实值吗 对。它是一个物体。如果不是,则

引用时,我需要将一个参数传递到utils.js文件的module.exports中

在请求utils.js之后,我对如何调用sayHi感到有点困惑


我得到了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 = {};