【问题标题】:Function execution order [duplicate]函数执行顺序[重复]
【发布时间】:2013-04-19 02:01:52
【问题描述】:

我有以下代码:

function() {
    $.getJSON(
        myurl + '/get_data',
        function(data) {
            function sort_data(first, second) {
                return (first.sort - second.sort);
            }
            console.log(data);
            console.log(data.sort(sort_data));
        }
        ... snipped for brevity

数据是对象数组,每个对象都有排序字段,是整数。默认情况下,它们都是随机顺序的。 所以执行上面的代码后它告诉我排序前后的数据是相同的。至少两个 console.log 输出是相同的(并且它们是排序的)。但是,如果我跳过排序部分而只是 console.log(data.objects) - 它是不同的并且是未排序的。
似乎先执行 sort ,然后执行 console.logs 。为什么会这样?谢谢!

【问题讨论】:

    标签: javascript


    【解决方案1】:

    这是因为console.log() 打印了对该对象的引用,而 sort() 重新排列了同一对象引用中的数据。

    如果你想看看差异,请使用

    console.log(JSON.stringify(data));
    console.log(JSON.stringify(data.sort(sort_data)));
    

    JSON.stringify() 创建 json 对象的字符串表示形式,它不会受到对 json 对象的任何进一步更改的影响。

    【讨论】:

    • AIUI,Chrome 的最新版本修复了这个问题。
    • 我明白了,它成功了,谢谢!但是为什么我的代码在两种情况下都显示相同的数据?因为在第一个 console.log(data) 中它还不知道我要在下一行对数据进行排序。
    • 当您说 `console.log(data);` 时,它会打印对存储对象的内存位置的引用。当您对对象进行排序时,原始对象会被修改,因此这些更改也会反映在记录的引用中
    • @Chelios 你也可以看看 Alnitak 发布的链接
    • 有趣的东西,谢谢!明白了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    相关资源
    最近更新 更多