javascript - 当 Node.js 中的多个文件需要一个模块时会发生什么?
问题描述
例如,如果有一个文件foo.js带有一个变量x,该变量用数字 1 初始化。x 是文件中的 module.export 。现在,如果在另外两个 javascript 文件中需要 foo.js,并且 x 在这两个文件中的值分别更改为 5 和 10。在这种情况下究竟会发生什么?x 是否存在三个不同的副本,或者只有一个 x,并且根据最后运行的文件,x 将保持该值?
解决方案
如果x
是不可变值,那么它将在您的场景中作为 1 传递给这两个文件。如果您x
稍后在其他文件中更改。原来的x
不会改变。
// foo.js
let x = 1;
setTimeout(() => {
console.log('original: ', x);
}, 1000);
module.exports = x;
//a.js
let x = require('../lib/foo');
x = 2;
console.log('required x: ', x);
//output
require x: 2
original: 1
如果x
是可变值,那么无论在哪里改变它,都会影响到所有x
使用它的地方。
// foo.js
let x = {
a: 1
};
setTimeout(() => {
console.log('original: ', x);
}, 1000);
module.exports = x;
//a.js
let x = require('../lib/foo');
x.a = 2;
console.log('required x: ', x);
//output
require x: {a: 2}
original: {a: 2}
推荐阅读
- amazon-cloudformation - AWS SSM-Agent 未启动
- java - 返回 201 在 Spring Webflux 中具有特定主体的已创建状态
- php - Laravel 模型关系 - 我想建立什么样的关系?
- excel - excel在单元格上显示自定义vlookup工具提示/弹出/评论
- sublimetext3 - Sublime text 3,重新分配 + 和 - 远离增加减少 font_size 以折叠展开
- javascript - 表单中的默认值
- javascript - 选择“@section Scripts & @Scripts.Render”是否仅适用于 MVC 而不是 Html 页面?我们是用来嵌入 jQuery 代码的吗?
- javascript - 使用两个 Html.Partial 导入相同的 html 具有相同的 id
- python - 当我必须在长熊猫系列(> 15 M 个元素)中搜索时,如何优化“枚举”?
- python - setuptools-scm:当前版本而不是下一个版本