功能执行顺序

时间:2013-04-25 08:46:42

标签: javascript

我有以下代码:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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