Javascript 从具有module.exports但不返回的函数中获取变量

Javascript 从具有module.exports但不返回的函数中获取变量,javascript,Javascript,我有点迷路了: 我试图在另一个函数中使用一个变量,因为我已经需要其他函数的返回。我想我可以让变量global可用,然后将它导入FileB,有什么不对的吗?有没有更好的方法?非常感谢 文件A: const variableToPass = null; module.exports = (env) => { variableToPass = env; const varA = require(`./FileB.js`); const varB = doThis(v

我有点迷路了:

我试图在另一个函数中使用一个变量,因为我已经需要其他函数的返回。我想我可以让变量global可用,然后将它导入FileB,有什么不对的吗?有没有更好的方法?非常感谢

文件A:

const variableToPass = null;

module.exports = (env) => {
    variableToPass = env;

    const varA = require(`./FileB.js`); 
    const varB = doThis(varA, …doSomething());
    return varB;
};

module.exports = variableToPass;
文件B:

const variableToPass = require(‚./.FileA‘);

console.log(variableToPass);

它会记录:
{[Function]variableToPass:null}

您在这里遇到了几个问题

  • const env
    定义了一个常量,因此您无法更改它
  • (env)=>{
    使用同名的局部变量屏蔽它,因此您甚至不尝试更改它
  • 无论如何,你都不会调用那个函数
  • module.exports.env=env;
    复制计算语句时
    env
    值,因此即使更改了
    env
    ,也不会更改导出属性的值
  • 只需导出一个合理的数据结构,其中包含您需要的所有内容

    // called.js
    
    var env = null;
    
    function stuff() {
        env = 1;
        return 2;
    }
    
    function get_side_effect() {
        return env;
    }
    
    module.exports = {
        stuff: stuff,
        get_side_effect: get_side_effect   
    };
    
    // caller.js
    
    const caller = require("caller");
    
    var stuff = called.stuff();
    var side_effect = called.get_side_effect();
    console.log(stuff, side_effect);
    
    或者从函数返回合理的数据结构:

    // called.js
    
    var env = null;
    
    function stuff() {
        env = 1;
        return {
            value: 2,
            env: env
        };
    }
    
    
    module.exports = {
        stuff: stuff
    };
    
    // caller.js
    
    const called = require("called");
    
    var stuff = called.stuff();
    console.log(stuff.value, stuff.env);
    

    即使这不是最佳实践,您也可以尝试使用getter和setter函数导出整个类

    setEnv(){
      env = val;
    }
    
    getEnv(val){
       return env;
    }
    
    在文件B中:

    console.log(fileA.getEnv);
    

    Globals是邪恶的。如果可以的话,请不要使用Globals。是的,这就是我的想法:-)但我不知道如何通过模块内部的require或类似方式将var传递到文件中。在env函数中导出您的导入现在是一个具有
    env
    属性的函数,因此它看起来可以工作,尽管我不确定您是否想要附加属性是的,该属性是我在函数中使用的param,但我想使该属性也在fileB中可用,这是我在函数中需要的属性,所以为什么不执行
    module.exports={env:env,func:}