【问题标题】:getting a variable out of a function with module.exports but without a return使用 module.exports 从函数中获取变量但没有返回
【发布时间】:2018-07-24 02:37:08
【问题描述】:

我有点失落:

我正在尝试使变量在另一个函数中可用,因为我确实需要其他东西的返回。我想我可以让变量全局可用并将其导入 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 }

【问题讨论】:

  • 全局变量是邪恶的。如果可以,请不要使用全局变量。
  • 是的,我就是这么想的 :-) 但我不知道如何通过 env 函数中 module.export 中的 require 或类似方法将 var 传递给文件
  • 您的导入现在是一个具有env 属性的函数,所以看起来它可以工作,尽管我不确定您是否想将属性附加到函数。
  • 是的,该属性是我在函数中使用的参数,但我想让该属性也可以在 fileB 中使用,这是我在函数中需要的
  • 那为什么不module.exports = { env: env, func: <your function> }

标签: javascript


【解决方案1】:

这里有几个问题。

  1. const env 定义了一个常量,所以你不能改变它
  2. (env) => { 用同名的局部变量对其进行掩蔽,因此您甚至不必尝试更改它
  3. 你永远不会调用那个函数
  4. 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);

【讨论】:

    【解决方案2】:

    即使这不是最佳实践,您也可以尝试使用 getter 和 setter 函数并导出整个类。此外,env 必须是 let 而不是 const。

    setEnv(){
      env = val;
    }
    
    getEnv(val){
       return env;
    }
    

    在文件 B 中:

    console.log(fileA.getEnv);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 2014-04-27
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 2016-12-16
      相关资源
      最近更新 更多