JavaScript中如何在一个文件内修改另一个文件的变量值
问题根本原因
JavaScript中基础数据类型(数字、字符串、布尔值等)是按值传递的,你把length作为参数传入excute方法时,实际传递的是这个变量的值的副本,函数内部修改的只是副本,自然不会影响index.js里的原始变量。
可用解决方案
方案1:将基础类型封装为引用类型(最简单快速)
引用类型(对象、数组)是按引用传递的,修改其内部属性会同步到原始对象:
index.js 代码
// 把length放在对象中,使用引用类型传递 var data = { length: 0 } client.commands.get('join').excute(data); // 调用完成后data.length就是更新后的数值
anotherfile.js 代码
module.exports = { name: 'join', description: "", excute(data){ data.length++; } }
方案2:将变量挂载到公共上下文(适配你现有的client对象逻辑)
如果你的client是全局可访问的公共对象,可以直接把变量挂载到client上:
index.js 代码
client.length = 0; client.commands.get('join').excute();
anotherfile.js 代码
module.exports = { name: 'join', description: "", excute(){ // 只要当前作用域能访问到client对象,直接修改即可 client.length++; } }
方案3:抽离独立模块统一管理变量(适合多文件频繁修改的场景)
如果这个变量需要在多个文件中读写,建议单独抽成管理模块,逻辑更清晰:
新建lengthManager.js
let length = 0; module.exports = { getLength: () => length, incrementLength: () => length++ }
index.js 代码
const lengthManager = require('./lengthManager.js'); client.commands.get('join').excute(); // 需要取值时调用 lengthManager.getLength() 即可
anotherfile.js 代码
const lengthManager = require('./lengthManager.js'); module.exports = { name: 'join', description: "", excute(){ lengthManager.incrementLength(); } }
内容的提问来源于stack exchange,提问作者CurPlayzz
相关产品推荐
相关产品推荐

