【发布时间】:2019-03-23 21:23:08
【问题描述】:
// fileA.js
export let dataObj = {name: "intitial name"};
export let changeDataObj = () => {
dataObj = Object.assign({}, {
name: "changed in changeDataObj fn"
});
}
//fileB.js
import {dataObj, changeDataObj} from "./fileA.js";
const myAsyncFunction = async () => {
const response = await myApiCall();
console.log(dataObj); // {name: "initial name"}
console.log(response); // {name: "name from api"}
dataObj = Object.assign({}, response);
// Throws ReferenceError: dataObj not defined on my computer with Webpack, babel
// throws Error: "dataObj" is read-only. in codesandbox.io vanilla template using parcel. Codesandbox link https://codesandbox.io/s/nrn9o71jmm
// but,
changeDataObj();
console.log(dataObj); // {name: "changed in changeDataObj fn"}
}
为什么我不能在myAsyncFunction 中重新分配dataObj,即使它在不同的文件中使用let 定义,但如果我调用与dataObj 在同一文件中定义的changeDataObj 则可以工作。这是预期的行为还是我错过了什么?
codesandbox.io 的链接https://codesandbox.io/s/nrn9o71jmm
请检查浏览器控制台而不是内置的代码和框控制台以查看错误。
【问题讨论】:
-
这与
async functions无关,但分配目标来自模块import。
标签: javascript import es6-modules referenceerror