Простая функция не выполняется

var fon = 0;

function changefon(fon) {
  if (fon == 0)
    alert('не выводит alert');
}
<a type="sumbit" href="#" onclick="changefon();" class="button_menu">Сменить фон</a>

Функция активируется по клику на кнопку. Пробовал и var и let и const - результат никакой.


Ответы (1 шт):

Автор решения: yar85

Параметр fon функции перекрывает одноименную переменную из внешнего лексического окружения функции.
И функция здесь вызывается без аргумента (см. в разметке) - а значит, при ее выполнении, локальная "переменная" fon (из параметров функции) содержит значение undefined. Это значение не равно числу 0, то есть условие в операторе if не соблюдается, а поэтому и диалоговое окно алерта не появляется.

Чтобы в функции использовалась внешняя переменная, надо просто переименовать (или вообще убрать) параметр:

var fon = 0;

function changefon(notFon) {
  if (fon == 0) {
    alert('теперь выводит alert');
    document.body.style.backgroundColor = '#dfd';
  }
}
<a type="sumbit" href="#" onclick="changefon();" class="button_menu">Сменить фон</a>

Конечно же, это применимо и к let, и к const тоже. Именно перекрытие внешних переменных локальными - не зависит от способа их объявления (от способа объявления зависят другие вещи: поднятие переменных, область их видимости, время жизни, и изменяемость - более подробная информация о способах объявления есть в справочнике).

→ Ссылка