Ответ 1
В Chrome (WebKit, поэтому Safari также), console.log
вызовы с объектными аргументами регистрируют ссылку на объект. После щелчка и открытия вкладки объекта внутренности остаются постоянными (предположительно, кеш рода) и больше не связаны с объектом, на который первоначально ссылаются (так что если на более позднем этапе объект изменится, это не будет отражено). Однако до этого момента объект остается "незакрытым". Поэтому, когда вы регистрируете объект несколько раз, а затем открываете каждый зарегистрированный объект, все они указывают на тот же объект в памяти, значение которого является самым последним обновленным.
Это хорошо известная "проблема", хотя поведение является результатом дизайнерского решения (см. комментарии к первой ссылке) и поэтому не считается ошибкой команды разработчиков.
Легкие обходные пути - это любые средства для получения неъектного значения объекта, поэтому любой метод сериализации (например, console.log(JSON.stringify(foo));
).
https://bugs.webkit.org/show_bug.cgi?id=35801
http://code.google.com/p/chromium/issues/detail?id=44720
http://code.google.com/p/chromium/issues/detail?id=50316