【问题标题】:Node.js module variables [duplicate]Node.js 模块变量 [重复]
【发布时间】:2020-05-11 19:35:26
【问题描述】:

那么,我想了解 NodeJ 在模块中存储变量的对象是什么?我知道nodejs模块中的THIS返回module.exports,所以我试图在模块对象中找到模块变量,但没有任何变量。全局对象也没有这个变量。

例如:

const a = 0;

Nodejs 中的哪个对象包含我的 'a = 0' ?我可以访问该对象吗?如何访问?

【问题讨论】:

标签: javascript node.js node-modules


【解决方案1】:

在 Node 中,就像在所有 Javascript 环境中一样,存储变量名称及其内容的容器称为Lexical Environment。每个街区都有这样的环境。当一个变量被引用(分配一个值或检索一个值)时,解释器检查当前块的 LE 中是否存在这样的变量。如果没有,它会查看下一个外部块中的 LE,依此类推,直到找到匹配的变量名称,然后根据需要检索或设置值。

这个容器完全在引擎内部 - 除了引用变量,你不能通过 JS 显式地与它交互。它不是 Javascript 对象。

词法环境和环境记录值纯粹是规范机制,不需要对应于 ECMAScript 实现的任何特定工件。 ECMAScript 程序不可能直接访问或操作这些值。

这不是模块或节点特有的东西。例如,在浏览器中运行以下代码:

(() => {
  const a = 0;
})();

有外部环境(顶层,全局),也有内部环境,a 变量名包含在那个内部环境中。

【讨论】:

    【解决方案2】:

    Nodejs 中的哪个对象包含我的 'a = 0' ?

    不,它不在对象中,而是在函数中。

    我可以访问这个对象吗?如何访问?

    如果你只是按照你描述的方式声明它,你就不能。

    在模块之外获取变量的唯一方法是先导出它。

    您必须在链接到 module.exports 的参考树中拥有它。

    模块内的所有内容都将被包装到一个函数中,并且 const 将在函数范围内声明,因此如果不导出它就无法将其取出。

    只需执行以下操作即可使其被其他模块访问:

    module.exports = {
      a: a
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-30
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多