0

Я использую Инструменты разработчика в Chrome 13, когда я напечатал эту строку:Расположение глобально определяется в Chrome 13

var location = "Hello"; 

После нажатия Enter, страница изменилась, и дал мне ошибку 404. В адресной строке теперь добавлен Hello, добавленный к последнему адресу.

http://www.google.com/Hello

Я клянусь, что я набрал те же строки в Chrome в прошлом, и не была та же проблема. Я думал, что место было в window.location.

Что-то изменилось, или я никогда не замечал этого раньше?

ответ

2

Это совершенно нормально, что контекст в инструментах разработчика будет window. Введите this и посмотрите, что говорит. Вероятно, это window.

Таким образом, когда вы набираете:

var location = "Hello"; 

Вы пытаетесь переопределить переменную в глобальном масштабе, что уже существует. Глобальной областью в браузере является объект window. Таким образом, location в глобальном масштабе совпадает с window.location.

Попытка переопределить объект, который уже существует (с использованием var), не является ошибкой в ​​javascript. Он просто игнорирует объявление var и выполняет задание. И, назначая строку объекту местоположения, переходит на новую веб-страницу.

+0

Думать об этом сейчас, это очень очевидно. Я набрал это и, да, фактически, это был объект окна. Я просто удивлен, что раньше этого не замечал. – Jonathan

2

Возможно, Chrome изменил свои правила определения области обзора. Мне непонятно, следует ли рассматривать var на консоли как область окна или какую-то загадочную область консоли.

Если вы хотите создать переменную с именем location, вы должны создать безопасную область действия, например, используя немедленную функцию. Например.

(function(){ 
    var location = "hello"; // safe 
})(); 
+1

Он будет выполняться в глобальном масштабе, и 'location' уже существует. Поэтому он скорее перезапишет 'location', что приведет к навигации. Точно так же, как 'var foo = 123' вызовет' window.foo === 123'. – pimvdb

+0

Спасибо @pimwdb, я так и думал. Я не мог вспомнить, работал ли 13 так или нет, так как я все время остаюсь на хромизме:/ – jimbojw

+0

Да, я абсолютно согласен с тем, что упаковка вашего кода - это путь. Оказывается, jfriend00 был прав в том, что контекст инструментальных средств разработчика - это окно. – Jonathan