Node.js : module exports, 唯一对象

标签 node.js

我不明白为什么只有对象可以很好地导出。看一下:

第一个文件

var a = exports.a = {};
var b = exports.b = 0;

exports.xxxxx = function(){

    a.hello = 'help';
    b = 104;

};

第二个文件

var a = require('firstfile').a;
var b = require('firstfile').b;

module.exports = function(){

    console.log(a); // {hello:'help'}
    console.log(b); // 0

};

为什么?

导出 b 的解决方案是这样的:

第一个文件:

...
a.hello = 'help';
exports.b = 104; // (add exports)
...

第二个文件:

...
var b = require('firstfile');
...
console.log(b.b); // 104

为什么?

编辑

我想我明白了。

变量 a 只是一个引用! 我会向不明白的人解释:

  • 读取第一个文件时,a = {}, b = 0
  • 当我们更改 b 时,b 已更改,但模块(导出)没有更改!!
  • 这很正常,因为 exports.b = 104//我们更改了模块的值!需要谁。

现在,为什么对象不同?

  • 因为当执行文件2时。 (执行一次),a的值={}。
  • 但它显示 {xxx:xxx}
  • 这是因为文件执行时a的值不是{},而是这个对象的引用。
  • 因此,当我们需要获取这个对象时,我们会搜索所有引用。

记住两件事很重要:

  • 函数所需的模块被读取一次!需要在函数中进行 require 才能看到更改。
  • 对象库存引用。

再见! 希望这有帮助!

最佳答案

当您将 0 分配给 exports.b 时,它实际上被分配为常量值。您可以更新 b 变量指向的值,但它不会被重新导出。

例如,我通过添加 getB 函数稍微修改了您发布的内容:

var a = exports.a = {};
var b = exports.b = 0;

exports.xxxxx = function(){

    a.hello = 'help';
    b = 104;

};

exports.getB = function() { return b; };

然后,您可以通过在 REPL 中使用此文件来了解我的意思:

> var example = require('./example.js');
undefined
> example
{ a: {},
  b: 0,
  xxxxx: [Function],
  getB: [Function] }
> example.xxxxx()
undefined
> example.getB()
104
> example.b
0
>

编辑:您对引用文献的评论有些正确。当你最初说

var b = exports.b = 0;

您是说两个变量指向相同的值。这与指向同一引用(一个对象,就像您对 a 所做的那样)的两个变量不同。当您修改一个值时,另一个值不会被修改。换句话说,当您将 0 的值更改为 1 时,您不希望代码中的每个 0 实例也都为 1。那就不好了。

如果您希望 b 成为一个值并在每次修改该值时更新,则应重新分配 exports.b。这就是为什么您会看到大多数代码作为一个对象被导出...然后,您的导出将被视为引用,并且您的所有 b 都会按预期更新。

关于Node.js : module exports, 唯一对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640951/

相关文章:

html - 当我尝试将网站部署到 github 时出现 npm 错误

javascript - Webpack服务器的路由无法获取/页面

node.js - gyp 重建失败且链接器命令失败,退出代码为 1

node.js - $first 在 mongodb

node.js - 如何在 Node.js 中检查 MongoDB 连接是否处于事件状态

javascript - express.js 文档

javascript - Globby 和 rimraf 应该删除除 .yml 文件之外的所有内容

javascript - Mongoose 批量保存/异步更新每次只更新一些文档

node.js - 为 NodeJS 应用程序构建 docker 时找不到模块错误

javascript - 从 google Drive 自行下载 xlsx 文件