weixin_42302145
小熊海啸
采纳率100%
2021-04-11 17:14 阅读 69

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条回答 默认 最新

  • 已采纳
    technologist_16 CSDN专家-天际的海浪 2021-04-11 17:21

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

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

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

    点赞 1 评论 复制链接分享
  • software7503 CSDN专家-赖老师(软件之家) 2021-04-11 17:16

    不太可能出现这种情况,是不是别的地方还有打印语句

    点赞 评论 复制链接分享
  • software7503 CSDN专家-赖老师(软件之家) 2021-04-11 17:36

    你用debugger 设置断点测试一下

    点赞 评论 复制链接分享
  • qq_42138058 一剑荒芜 2021-04-11 17:19

    从浏览器中找到你的这段代码,看看是否是一样的

    点赞 评论 复制链接分享
  • fsgsggd 3wtczs93点抗母 2021-04-11 17:23

    ctrl+F5强制从服务器拉取最新的js

    点赞 评论 复制链接分享
  • Lazy33 Lazy33 2021-04-11 23:45

    你倒是给人采纳呀

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-04-12 10:28

    您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论 复制链接分享