在类星体应用程序扩展的启动文件中
register.ts
,我这样做:
let appUrl = '';
const bootFunc = ({app, store, router}) => {
console.log('In app-extension boot file');
appUrl = app.config.globalProperties.$appUrl;
};
export {bootFunc as default, appUrl };
变量
appUrl
被导出,然后当应用程序扩展初始化时,bootFunc
被调用。 appUrl
已正确初始化。
appUrl
被另一个文件导入并使用。我希望在那时设置 appUrl
,但是当我访问它时它仍然没有改变。
为什么
bootFunc
不覆盖该值?
在 JavaScript 中,变量包含对对象的引用。赋值会更改变量中的引用。它不会修改对象。
appUrl
包含对数据的引用。 export {bootFunc as default, appUrl };
导出此引用的副本。 appUrl = app.config.globalProperties.$appUrl;
为变量分配另一个引用,即对不同对象的引用。它不会修改第一个对象。永远记住:如果你想修改现有的引用,你不能使用赋值运算符。
这是基本的 JavaScript。您不需要模块、导入和导出来重现它:
let appUrl = '';
let appUrlCopy = appUrl;
appUrl = 'url';
console.log('appUrl:', appUrl);
console.log('appUrlCopy:', appUrlCopy);