小熊海啸 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条)

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名