小熊海啸 2021-04-11 17:14 采纳率: 33.3%
浏览 71
已采纳

js执行顺序问题 奇怪的代码执行顺序

 

触发以下方法时

这里130行  console.log(res.data)打印出来的数据,居然是已经被131行的forEach处理过的数据

也就是说131行优先于130行执行了

有大佬知道咋回事吗???

更新)

我在控制台模拟了一下,还是如此,这个现象真的存在

上代码!!!  大家也可以试试

        add(){
            var d=[
                {attr:'xx,aa,aa'},
                {attr:'ss,aa,aa'},
                {attr:'dd,aa,aa'},
                {attr:'ff,aa,aa'},
                {attr:'gg,aa,aa'}]
                console.log(d)
                d.forEach(item=>{
                    item.attr=item.attr.split(',')
                })
        }

add()

谢谢评论区的回答,原因找到了,居然还存在这种问题!!由于打印的是引用数据类型导致的!!!

用下图的方法设置一个定时器可以验证!!!

这说明console.log(d) 中打印的引用数据类型时,在引用数据发生改变后,其打印的值也会被实时修改!!!

 

  • 写回答

7条回答 默认 最新

  • 关注

    因为console.log()输出对象或数组时是在控制台显示一个对象或数组的引用。

    在用console.log()输出数组或对象时,对象(数组)的属性是折叠不显示的。
    如果你在console.log()输出之后改变了对象(数组)的属性,当你点击三角展开属性时,会重新读取对象(数组)当前的属性,也就是显示出来的是你点击三角展开时的属性,而不是执行console.log()时的属性。

    解决方法是用console.log(JSON.stringify(arr));以字符串方式输出
     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音