Node.js中如何通过导出函数正确初始化导出变量?
问题原因
你遇到的问题源于原始类型值的复制特性:在module.js导出globalVariable时,它是一个原始类型(undefined),Node.js会将这个值复制一份到导出对象中。后续initFunction修改的是模块内部的globalVariable变量,而app.js里解构出来的globalVariable是之前复制的那份undefined,两者完全独立,所以输出结果为undefined。
解决方案
以下是两种常用的修复方式:
方式一:用对象封装状态(推荐)
把需要共享的变量放到一个对象里导出,由于对象是引用类型,修改对象的属性会同步到所有引用该对象的地方。
修改module.js:
const state = { globalVariable: undefined }; const initFunction = (value) => { console.log('init Function'); state.globalVariable = value; }; module.exports = { initFunction, state };
修改app.js:
const { initFunction, state } = require('./module'); initFunction('test'); console.log('globalVariable: ' + state.globalVariable); // 输出 globalVariable: test
方式二:导出获取变量的函数
通过导出一个函数来获取模块内部变量的最新值,每次调用函数都会返回当前最新的变量状态。
修改module.js:
let globalVariable; const initFunction = (value) => { console.log('init Function'); globalVariable = value; }; const getGlobalVariable = () => globalVariable; module.exports = { initFunction, getGlobalVariable };
修改app.js:
const { initFunction, getGlobalVariable } = require('./module'); initFunction('test'); console.log('globalVariable: ' + getGlobalVariable()); // 输出 globalVariable: test
内容的提问来源于stack exchange,提问作者mvg
相关产品推荐
相关产品推荐

