如何在不将变量作为参数传递的情况下使用变量?

How can I use variables without passing them as a parameter?

我这里有 app.js:

let x = 5;
const print = require('./print')
print()

我这里有 print.js

module.exports = function(){
console.log(x)
}

有什么好的方法可以在print.js函数中使用app.js中的变量吗?我在实际应用程序中使用了更多变量,因此我想避免使用参数。

将这些变量分配给 global 对象。

global.x = 5;
const print = require('./print')
print()
module.exports = function(){
console.log(global.x)
}

你不能也不应该。 node.js 中的模块化架构不是这样工作的。与浏览器的混乱世界不同,许多代码主体只是在全局范围内声明了无数的东西,然后所有东西都可以使用,node.js 是模块化的。每个文件通常都是它自己的模块。它必须导出它希望共享的东西,而其他模块必须导入它的导出才能使用它们。

如果您想与另一个模块共享数据,您可以调用一些函数并将该数据传递给它。

虽然 node.js 中有全局变量(您可以分配 global.x = 5 之类的东西,然后在任何地方引用它们),但 强烈建议不要使用全局变量 除了平台定义的内置 node.js 功能(不是由应用程序定义)。

全局变量存在问题的原因有很多,而且项目越大、从事该项目的人越多或您使用的第 3 方代码库越多,情况就越糟。如果你真的想知道更多,你可以搜索 "why are globals bad in Javascript" 并找到关于该主题的各种讨论。

node.js 的模块化架构是我们拥有 NPM 和数以万计可在 node.js 中运行的易于重用的代码模块的原因之一。这些代码片段都使用相同的模块化架构,使它们能够统一地用于任何应用程序,而符号冲突或模块与现有代码冲突的风险要小得多。而且,模块化架构清楚地定义了对其他代码片段的依赖关系,因此一个模块可以自包含并加载它所依赖的任何模块,甚至是与项目中其他代码正在使用的不同版本的模块。 None 在通过全局变量共享代码时有效。

我再说一遍。在 node.js 中,如果你想在模块之间共享一个函数或数据,你可以在一个模块中导出它,然后在另一个模块中导入它。