如何在JavaScript中从其他JS文件的函数获取返回数据?
解决方案
首先先修正你user.js里的一个关键问题:localStorage.getItem返回的是字符串类型,直接访问data.user会报错,需要先通过JSON.parse解析,同时要处理数据不存在的情况:
// user.js 修正后的代码 export default function getUser() { const dataStr = localStorage.getItem("user-account"); // 处理数据不存在的情况,避免后续报错 if (!dataStr) { return null; // 也可以返回 { ID: '', Name: '' } 这类默认空对象 } const data = JSON.parse(dataStr); const user = { ID: data.user.ID, Name: data.user.Name, }; return user; }
下面提供两种满足你需求的实现方式:
方案1:ES模块导入使用(推荐)
这是现代JS项目的标准做法,不会造成全局变量污染:
- 在需要调用的JS文件中导入函数:
// 比如在index.js中 import getUser from './user.js'; // 调用函数获取user对象 const currentUser = getUser(); // 后续可以直接使用currentUser console.log(currentUser?.ID, currentUser?.Name);
- 在HTML中引入脚本时,需要给script标签加上
type="module":
<script type="module" src="./index.js"></script>
方案2:挂载为全局函数
如果必须让函数全局可用,可以将其挂载到window对象上:
- 修改
user.js:
// user.js function getUser() { const dataStr = localStorage.getItem("user-account"); if (!dataStr) { return null; } const data = JSON.parse(dataStr); const user = { ID: data.user.ID, Name: data.user.Name, }; return user; } // 挂载到window对象,成为全局函数 window.getUser = getUser;
- 在其他JS文件中直接调用:
// 任意JS文件中无需导入,直接调用 const currentUser = getUser(); console.log(currentUser);
- HTML中按顺序引入脚本即可:
<script src="./user.js"></script> <script src="./你的其他文件.js"></script>
注意事项
- 确保你存入
localStorage的user-account是JSON格式的字符串,比如通过localStorage.setItem("user-account", JSON.stringify({user: {ID: 1, Name: "张三"}}))存入,否则JSON.parse会报错。 - 全局挂载函数容易造成变量冲突,优先使用ES模块方案。
内容的提问来源于stack exchange,提问作者Sulthon Maulana Fathuddin
相关产品推荐
相关产品推荐

