javascript - 为什么重新分配导入的对象会抛出 ReferenceError?

标签 javascript import es6-modules referenceerror

// 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 定义的,但如果我调用 changeDataObj 就可以工作它与 dataObj 在同一文件中定义。这是预期的行为还是我遗漏了什么?

codesandbox.io 的链接 https://codesandbox.io/s/nrn9o71jmm

请检查浏览器控制台而不是内置的 codesandbox 控制台以查看错误。

最佳答案

Why can't I re assign dataObj inside myAsyncFunction even though it is defined with let in different file

答案在您收到的其他错误消息中:

"dataObj" is read-only

所有导入都是只读的。它们是如何定义的并不重要。 ReferenceError 可能是由于代码的转换方式所致。

but works if I call changeDataObj which is defined in the same file as dataObj

因为 dataObj 是该文件中的普通 let 绑定(bind)。

关于javascript - 为什么重新分配导入的对象会抛出 ReferenceError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55318536/

相关文章:

javascript - 来自 npm : import THREE. Lut() 的 Three.js

node.js - '不支持使用 Node.js 解析 ES 模块的目录导入'

reactjs - 如何在 create-react-app 中导入 ES6 模块而不导致测试失败?

javascript - 单击 boxdiv 时如何获取单个弹出信息窗口

java - Web 应用程序的屏幕捕获

php - 将 CSV 导入 Mysql 期间的 NULL 字段

html - CSS @import 导致媒体查询类不起作用

node.js - 如何将参数从一个 nodejs 文件传递​​到另一个?

Javascript/DOM 事件名称约定

javascript - 除了 3 维数组之外,还有更好的方法来管理基于网格的游戏吗?