Javascript 为什么codesandbox.io会记录阵列的最终状态?

Javascript 为什么codesandbox.io会记录阵列的最终状态?,javascript,webpack,parceljs,codesandbox,Javascript,Webpack,Parceljs,Codesandbox,我确信这个表达 const arr = [1,2,3] console.log(arr) arr.push(4) 应返回[1,2,3]。实际上,如果在浏览器控制台中写入它,它将返回预期的结果。但是我无意中打开并在那里写了相同的代码,我得到的答案是[1,2,3,4]。我真的很困惑:)我不知道为什么会这样。我想这是因为bundler,我尝试了包裹和网页包捆绑器,两者都有相同的结果。但正如我所说,我不确定。如果有人知道我很想读它。当代码驻留在脚本中并立即执行时(在加载页面之前),甚至当控制台打开时,

我确信这个表达

const arr = [1,2,3]
console.log(arr)
arr.push(4)

应返回
[1,2,3]
。实际上,如果在浏览器控制台中写入它,它将返回预期的结果。但是我无意中打开并在那里写了相同的代码,我得到的答案是
[1,2,3,4]
。我真的很困惑:)我不知道为什么会这样。我想这是因为bundler,我尝试了包裹和网页包捆绑器,两者都有相同的结果。但正如我所说,我不确定。如果有人知道我很想读它。

当代码驻留在脚本中并立即执行时(在加载页面之前),甚至当控制台打开时,只要页面刷新,就会发生这种情况。当控制台尚未激活时调用console.log只会导致对正在排队的对象的引用,而不是控制台将包含的输出。因此,在控制台准备就绪之前,不会对数组(或任何对象)求值。这确实是一种懒惰的计算。

不,您并没有给变量arr赋值,您只是在推送新值。另外,当您在控制台中评估输出时。它将计算为当前值(即现在的值,而不是发送到控制台时的值)。如果您只想让它拥有实际数据,那么应该对其进行切片,或者对数据使用json.stringify