Javascript 意外标记';出口';
我正在尝试将变量从index.js导出到profile.js。当我在文件顶部导出时,例如Javascript 意外标记';出口';,javascript,Javascript,我正在尝试将变量从index.js导出到profile.js。当我在文件顶部导出时,例如 export let k = 12; 或 它很好用。但是,当我在DOMContentLoaded事件之后导出时,例如 document.addEventListener('DOMContentLoaded', function(){ export let k = 12; }) 然后显示意外的标记“导出”。下面的一个警告也给出了相同的错误 if (true){ export let k = 2; } 我
export let k = 12;
或
它很好用。但是,当我在DOMContentLoaded事件之后导出时,例如
document.addEventListener('DOMContentLoaded', function(){ export let k = 12; })
然后显示意外的标记“导出”。下面的一个警告也给出了相同的错误
if (true){ export let k = 2; }
我做错了什么
加载DOMContentLoaded后,我应该如何导出变量
你不能<代码>导出和导入只能出现在模块的顶层
您可以改为导出变量,并在处理程序中设置其值:
export let k;
document.addEventListener('DOMContentLoaded', function(){ k = 12; })
如果其他模块导入k
,它们将获得一个只读绑定,这意味着如果它们在DOMContentLoaded
之前使用它,它们将获得您提供的任何初始值(上面未定义的,因为let k;
声明中没有初始值设定项),但是如果他们在DOMContentLoaded
之后使用它,他们将看到处理程序分配的值
这样说,如果您的模块提供了在某个点之后才可用的信息,您可能会考虑导出一个承诺,比如:
let kPromiseResolve;
export const kPromise = new Promise(resolve => {
kPromiseResolve = resolve;
});
document.addEventListener('DOMContentLoaded', function(){ kPromiseResolve(12); })
然后,使用它的模块将执行以下操作:
import { kPromise } from "./your-module.js";
kPromise
.then(k => {
// ...use `k`...
})
.catch(error => {
// ...
});
或者在支持的环境中,如果导入模块在没有k
的情况下无法执行任何有用的操作,则可以执行以下操作:
import { kPromise } from "./your-module.js";
const k = await kPromise;
// ...use `k`...
令牌导出不能在函数内您不能在函数内使用export
,因为导出是在其他模块导入模块后立即进行的。你为什么要这么做?这能回答你的问题吗?(哦,在上面的第一个代码块中,如果您看到let k=12;
,请点击刷新。我忘记删除let
)
import { kPromise } from "./your-module.js";
const k = await kPromise;
// ...use `k`...