В других браузерах, которые я пробовал (например, Chromium, IE, Safari), область действия по умолчанию, выполняемая на консоли (вне любой функции), такая же, как и код, выполняемый вне функции в <script>
. То есть, относится к объекту window
, и все вновь объявленные переменные становятся глобальными (и, что эквивалентно, свойствами объекта window
).Размер по умолчанию в веб-консоли Firefox - что происходит?
В Firefox ... что-то еще происходит, но я не могу понять, что. В большинстве браузеров this === window
оценивает true
на консоли Chrome, но в Firefox это неверно. this.window === window
верно в Firefox. По этой причине переменные, объявленные или назначенные через консоль, не становятся видимыми для скриптов, запущенных на странице, если вы не указали их как атрибуты объекта window
явно.
Чувство не останавливается на достигнутом. Задания, сделанные объекту window
, магически распространяют и изменяют переменные в области консоли Firefox, но обратное неверно. Пример:
window.foo = 5;
console.log(foo); // 5
console.log(this.foo); // 5
console.log(window.foo); // 5
foo = 10;
console.log(foo); // 10
console.log(this.foo); // 10
console.log(window.foo); // 5 -- in any other browser, this would be 10
Что происходит за кулисами? Каков загадочный объект, который this
относится к Firefox, и почему он имеет эту своеобразную связь с объектом window
? Является ли этот материал документированным где угодно?
(В случае, если это имеет значение, я испытал этот материал в Firefox 19.0.2. Я не проверял другие версии Firefox.)
Похоже, что он работает в другом пространстве. То, что вы видите, - это то, как работает прототипное наследование. (Похоже, вы видите объект, прототипом которого является foo). (Связанный вопрос Я только что нашел http://stackoverflow.com/questions/1803660/firebug-console-window-scope-why-isnt-this-always-the-same) –
Попробуйте просто запустить 'debugger;' в консоли. –
Я нахожусь на своем телефоне, поэтому не могу получить ссылку, но google «kangax delete», и вы должны получить объяснение этого странного поведения. –