js的执行顺序问题?

image.png
请问这段代码中先打印出this.answersArr ,然后再对它进行循环操作,那打印的值是一开始的,还是后来循环操作后的

阅读 1.9k
3 个回答

javascript 里的 console.log 经常不是一个简单的打印/输出。

比如在 chrome 的控制台里,如果 log 的参数是一个对象话,你可以在 console 里查看这个对象“实时”的状态,而不是打印(console.log执行)时的状态。当你展开这个对象的时候,里面展示的值时在你点击展开按钮时对象的值。就是说,如果 console.log 之后的程序修改了被打印的对象,你可以看到修改后的值。

如果你希望看到执行 console.log 时的值,而不受后续的程序影响,可以先转换字符串再打印。

打印的是一开始的值,但是因为数组是引用类型,你在控制台展开数组的时候会自动引用最新的值,也就是操作后的。
解决方式你可以通过深拷贝切断引用

console.log(JSON.parse(JSON.stringify(this.answersArr)))

取决于console.log的实现方式了。chrome的调试工具里输出的是对象引用(支持更加丰富的交互方法),所以console.log后再修改时可以放映在之前的输出里面的。如果使用console.dir就只会输出当时的值。
如果是node.js的console.log,那就是输出序列化后字符串了,自然以后不会再自动更新。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题