Почему переменная name не должна инициализироваться после первого использования [Javascript]

Всякий раз, когда я инициализирую переменную с именем 'name', она сохраняет свое значение через страницы.

Как это:

page1.html

<html>
<script>
    var name = prompt("What's your name?");
    alert(name);
</script>
    <a href='page2.html'> Page2</a>
</html>

page2.html

<html>
   <script>
       alert(name);
   </script>
</html>

Таким образом, на обеих страницах имя переменной содержит значение, указанное в приглашении первой страницы, две страницы предупреждают об одном и том же, может кто-нибудь объяснить мне, почему это происходит?

3 ответа

Решение

Поведение, которое вы видите, не является нормальным и не будет работать почти для любой другой переменной. name на самом деле является зарезервированной переменной в Javascript, поэтому вы видите интересное поведение.

Все переменные в Javascript являются свойствами window объект. Если вы создаете переменную с именем ageВы также можете получить к нему доступ по адресу window.age, window.name является специальным свойством текущего окна браузера, которое позволяет ему получить имя, и это значение может сохраняться между страницами.

Если вы измените имя вашей переменной на age, он вернется к работе должным образом - переменная будет пустой в page2.html.

Еще немного оwindow.name

Глобальный name переменная window.name собственность Это строка, которая действительно сохраняется при загрузке страниц в одном и том же контексте просмотра - если вы откроете вторую страницу в новой вкладке, она больше не должна "работать".

Чтобы избежать этого, вместо этого используйте безопасное имя для вашей переменной или оберните ваш код в IIFE.

Он не будет сохранять свою ценность через страницы, и две страницы не будут предупреждать одно и то же.

На вашей странице должен быть какой-то другой код, который устанавливает name к некоторой ценности.

Другие вопросы по тегам