导出时nodejs变量未定义

sha*_*ess 2 javascript node.js express

嘿,我想知道为什么以下返回未定义:

let variable;

module.exports.initialize = () => {
  variable = "123";
};

module.exports.variable = variable;


Run Code Online (Sandbox Code Playgroud)

我只是需要文件 A 中的模块,然后调用初始化函数。在文件 BI 中需要它和 console.log 变量,但它返回未定义。我在这里缺少什么?

h-s*_*fat 5

在 JavaScript 中,有两种类型的值:1)原始类型和 2)引用类型原始值始终按其值复制,而引用类型始终按其引用(而不是按其值)复制。

原始值的示例:undefined, null, boolean, string, number. 引用类型的示例:除基本类型之外的所有类型。例如,Object, array等等。请参阅下面的代码片段。

原始类型示例

let a = 10;
let b = a;

console.log(a);
console.log(b);

b = 20;

console.log(a);
console.log(b);
Run Code Online (Sandbox Code Playgroud)

参考类型示例

let obj_a = {value: 1}
let obj_b = obj_a;

console.log(obj_a);
console.log(obj_b);

obj_b.value = 20;

console.log(obj_a);
console.log(obj_b);
Run Code Online (Sandbox Code Playgroud)

let variable因此,当您按其值声明变量undefined并分配时,module.exports.variable = variable您只需将其值设置为undefined

请参阅下面的示例。

const myExports = {};

let variable;

function initialize() {
  variable = 10;
}

myExports.variable = variable;

console.log(variable);
console.log(myExports.variable);

initialize();

console.log(variable);
console.log(myExports.variable);
Run Code Online (Sandbox Code Playgroud)

但是,如果您要variable使用引用类型(例如,对象)初始化,则对象module.exports.variable将反映变量属性的任何更改variable

例子:

const myExports = {};

let object = {};

function initialize() {
  object.value = 10;
}

myExports.variable = object;

console.log(object);
console.log(myExports.variable);

initialize();

console.log(object);
console.log(myExports.variable);
Run Code Online (Sandbox Code Playgroud)

希望它有意义。