Последовательные вызовы console.log вызывают несогласованные результаты

Хорошо, я полностью ошеломлен этим. (и я мог бы игнорировать что-то очевидное, но...)

У меня есть два последовательных вызова в 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;
        }
    );
}];

Возможные связанные вопросы

Ответ 1

Ну, вот ответ для тех, кто наткнется на это.

Короткий ответ

Console.log показывает глубокие изменяемые объекты в последнем состоянии выполнения, но не в состоянии , когда console.log был вызван.

Подробнее

В принципе, при работе с изменяемыми глубокими объектами Console.log сохраняет ссылку на указанный объект вместо хранения клонирования объекта.

Так как существует промежуток времени между хранением и визуализацией, когда вы нажимаете стрелку для дальнейшего контроля, то, что вы видите, на самом деле текущее состояние объекта, а не состояние объекта, когда console.log был вызван.

Один из способов всегда убедиться, что вы используете "моментальный снимок объекта", - это вызвать Json.stringify или использовать console.dir, когда он доступен.

Ответ 2

Weird. Это объект ECMA 5, который имеет странный геттер? Все еще не имеет смысла для простого $state call. Я предполагаю, что не только что-то сломано с вашим GC...

Вы уверены, что это зарегистрированные вызовы?