Простая функция не выполняется
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 шт):
Параметр 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 тоже. Именно перекрытие внешних переменных локальными - не зависит от способа их объявления (от способа объявления зависят другие вещи: поднятие переменных, область их видимости, время жизни, и изменяемость - более подробная информация о способах объявления есть в справочнике).