Оператор JavaScript if, выполняющий оба условия, если используется замена местоположения

У меня есть следующий оператор if, который ищет хэш на готовом документе (этот код НИКОГДА не запускается снова на странице). И если нет хеша, добавьте один, заменив его, чтобы он не вызывал событие hashchange.

if( window.location.hash == '' ) {

 console.log('no hash');

 location.replace(location.href.replace(/\/?$/, '#/section-0/page-0')); // change the url without creating a hashchange

} else {

 console.log('has hash');

}

Однако, если я нахожусь на странице без хеша, то, что я увижу на консоли, has hash и замена будет... как это возможно?поскольку этот консольный журнал находится в другой части инструкции. Если я закомментирую замену, то она попадает только в первую часть оператора if. Как он может перейти в оператор if, заменив (но игнорируя первый консольный журнал), а затем перепрыгните во вторую часть?

1 ответ

То, что вы говорите, не имеет смысла.

Я попытался сделать полный пример из вашего кода:

<button onclick="javascript:x()">test</button>

При открытии по умолчанию этот код выполняется следующим образом:

  1. Нажмите кнопку
  2. Консоль no hash
  3. бдительный
  4. Нажмите кнопку
  5. Консоль has hash

Если вы поместите код без объявления функции внутри тела (поэтому он всегда выполняется), вот так:

Это показывает:

  1. Консоль no hash
  2. бдительный

licensed under cc by-sa 3.0 with attribution.