Почему переменная 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
к некоторой ценности.