嘿,我想知道为什么以下返回未定义:
let variable;
module.exports.initialize = () => {
variable = "123";
};
module.exports.variable = variable;
我只是需要文件 A 中的模块,然后调用初始化函数。在文件 B 中,我需要它和 console.log 变量,但它返回未定义。我在这里缺少什么?
最佳答案
在 JavaScript 中,有两种类型的值:1) 原始类型 和 2) 引用类型。 原始值始终按其值复制,而引用类型始终按其引用(而不是按其值)复制。
原始值示例:未定义、null、 bool 值、字符串、数字
。
引用类型的示例:除基本类型之外的所有类型。例如,对象、数组
等。请参阅下面的代码片段。
原始类型示例
let a = 10;
let b = a;
console.log(a);
console.log(b);
b = 20;
console.log(a);
console.log(b);
引用类型示例
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);
因此,当您将变量声明为 let variable
时,其值为 undefined
并且当您分配 module.exports.variable = variable
时,您只是将其值设置为未定义
。
请参阅下面的示例。
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);
但是,如果您要使用引用类型(例如对象)初始化变量
,则module.exports.variable
将反射(reflect)对 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);
希望它有意义。
关于javascript - 导出时nodejs变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71097131/