我这里有两个文件:

index.js

let list = [];

function add() {
    //list.push("item");
    list = ["item"];
    console.log("B. list length " + list.length);
}

module.exports = {
    add,
    list
}

test.js

let { add, list } = require('./index');

console.log("A. list length " + list.length);
add();
console.log("C. list length " + list.length);

当前输出:

A. list length 0
B. list length 1
C. list length 0

预期输出:

A. list length 0
B. list length 1
C. list length 1

I don't understand why list not being updated in test.js个. The one fix I found was to use list.push("item"); instead of list = ["item"];. I have no idea why this is happening.

推荐答案

从另一个模块导入数组(或对象...)时,实际上是在创建对该数组的引用.在index.js文件中使用list = ["item"];重新分配list,而使用.push修改index.js中的list以及您在test.js中导入的列表引用.重新分配打破了index.jstest.js之间的引用.index.js仍然引用原始的空数组,而test.js现在引用了新的数组

let list = [];

function add() {
  // list.push("item");
  list = ["item"];
  console.log("B. list length " + list.length);
}

const importedList = list; // mocking require("./index");

console.log("A. importedList length " + importedList.length);
add();
console.log("C. importedList length " + importedList.length);

Javascript相关问答推荐

Fastify错误:CORS策略已阻止从起源api-dev.example.com上的MLhttp请求

如何提取Cypress中文本

如何使用JavaScript用等效的功能性HTML替换标记URL格式?

微软Edge Select 间隙鼠标退出问题

我试图实现用户验证的reduxstore 和操作中出了什么问题?

为什么我的includes声明需要整个字符串?

docx.js:如何在客户端使用文档修补程序

还原器未正确更新状态

覆盖TypeScrip中的Lit-Element子类的属性类型

JQuery Click事件不适用于动态创建的按钮

从页面到应用程序(NextJS):REST.STATUS不是一个函数

Webpack在导入前混淆文件名

未加载css colored颜色 ,无法将div设置为可见和不可见

同一类的所有div';S的模式窗口

如何确保预订系统跨不同时区的日期时间处理一致?

Next.js中的服务器端组件列表筛选

OnClick更改Json数组JSX中的图像源

如何在Jest中模拟函数

在单击按钮时生成多个表单时的处理状态

Django模板中未加载JavaScript函数