Назначая location.hash
на year
, вы не изменяете p.innerHTML
. year
и p.innerHTML
не ссылаются на ценность друг друга. Когда вы инициализировали следующим образом:
p.innerHTML = window.year;
Значение year
было скопировано , так что теперь у вас есть два значения, которые на тот момент оказались одинаковыми, но они не связаны так что если вы назначите новое значение одному, оно также обновит другое. Нет, они не являются ссылками.
Таким образом, в обработчике событий вы также должны назначить новый хеш для p.innerHTML
, или, лучше, поскольку хеш-код является текстовым, назначить его для p.textContent
:
var p = document.querySelector('p');
var year;
function showHash() {
// Assign both to textContent and year (they are independent)
p.textContent = year = location.hash;
// Maybe call some other functions which need to know about `year`
manage();
}
function manage() {
console.log(year);
// ... etc
}
window.onhashchange = showHash;
location.hash = '#2019'; // This triggers showHash, no need to call it explicitly
<p></p>
<a href="#2018-01">1</a>
<a href="#2018-02">2</a>