对console.log的连续调用会产生不一致的结果

时间:2014-02-27 05:30:45

标签: javascript angularjs console.log angular-ui-router

好的,我完全被这个目瞪口呆。 (我可能会忽略一些显而易见的东西但是......)

我连续2次调用console.log。他们之间没有别的东西

console.log($state);
console.log($state.current);

这是生成结果的图像

Console.log screenshot

为什么2会产生不同的“当前”物体?怎么会发生这种情况?


上下文:

这些调用是在解析路由依赖项时在ajax调用中进行的。如果您需要更多代码或上下文,请告诉我。

在Chrome和Firefox中确认了同样的问题

Ajax调用和包装函数(无论如何都没有修改)

normaCtrl.publicNorma = ['$http', '$state', '$stateParams', 'baseUrl', function ($http, $state, $stateParams, baseUrl)
{
    var id = $stateParams.id;
    return $http.get(baseUrl + "api/public/norma/" + id).then(
        function (response) {
            console.log($state);
            console.log($state.current);
            console.log($state.current.title);
            return response.data;
        }
    );
}];

可能的相关问题

2 个答案:

答案 0 :(得分:10)

嗯,这就是那些偶然发现的人的答案。

简答

Console.log在最后执行状态时显示深度可变对象,而不是在调用console.log时状态

更多详情

基本上,当使用可变深度对象时,Console.log存储对所述对象的引用,而不是存储对象克隆。

由于存储和可视化之间存在时间差,当您单击箭头进行进一步检查时,您所看到的实际上是对象的当前状态而不是状态调用console.log时的对象

始终确保使用“对象快照”的一种方法是在可用时拨打Json.stringify或使用console.dir

答案 1 :(得分:1)

怪异。它是一个ECMA 5对象有一个奇怪的吸气剂?普通的$ state调用仍然没有意义。我认为你的GC不仅仅有一些问题......

你确定这些是被记录的电话吗?