JavaScript

глобальные/локальные переменные в JavaScript

Есть картинка в рамке и кнопка, по нажатию на которую меняется картинка. Переменная i сейчас объявлена вне функции, а используется в функции (глобальная). Так все работает, картинки меняются. Но я хочу как-то объявить переменную " i " в функции. По правилам, если объявлять переменные вне функции и потом их использовать в функции - плохо, приводит в больших программах к ошибкам. Я пробовал объявлять ее в функции, но переменная обнуляется при нажатии на кнопку. Соответственно, ставится только одна картинка - первая в массиве.
Almat Amantaev
Almat Amantaev
138
«По правилам, если объявлять переменные вне функции и потом их использовать в функции - плохо, приводит в больших программах к ошибкам.»
Ничего подобного: таких правил объективно не существует (цитата - это явно чье-то мнение, и вероятно необоснованное). К ошибкам приводит говнокод, а не лексическая область переменной. Если прогать чисто и аккуратно, то можно смело использовать глобальные переменные.
_
По вашему коду:
1. уберите HTML-комментарии из содержимого <script>, у комментов в JS другой синтаксис (// однострочный, и /* многострочный */).
2. инициализацию массива и переменной elem вынесите за пределы функции. Вообще, такое пишется либо в обработчике onload, либо в листенере load, чтобы не было ситуаций когда обращения к DOM выполняются до ее загрузки.
3. сначала алгоритм, и только затем код. Ваш алгоритм содержит ошибки - показ начинается со второго элемента массива, а пятое нажатие на кнопку приведет к выходу за диапазон. Код соответственно наследует эти баги, плюс добавляются его косяки, и в итоге получается полный треш. Торопиться не нужно, отложите практику и займитесь сначала теорией, основами... еще, попишите алгоритмы на бумажке. Это исключит "гипнотическое" влияние редактора с подсветкой синтаксиса, которое так негативно влияет на новичков.
Иван Косько
Иван Косько
81 934
Лучший ответ
Almat Amantaev я здесь только начинаю, поэтому весь мой код - говнокод)
Almat Amantaev Я убрал все баги, кроме: массив фотографий содержит переменная, ее я объявил в ф-ии и elem тоже в ф-ии.
Просто я иду по учебнику (только начал работу с DOM) и там был такой пункт про глобальные переменные, там было написано, что можно использовать "use strict". Думаю, вы знаете, что это. поэтому я и стараюсь пока не использовать глобальные переменные.
Проблема-то остается с переменной " i "
ссылка на фото в хорошем качестве - https: //hkar.ru /TNG8
используй input c типом hidden
(По правилам, если объявлять переменные вне функции и потом их использовать в функции - плохо, приводит в больших программах к ошибкам)
Кто тебе такую ересть сказал ?
Забудь про слова var let они зобствена могут конечно пригодится но крайне редко Обявляй все переменные
как глобальные движок вывезет поверь на слово
вот мои наброски там код влажен ты внём видешь где нибуть использование var let и тому подобных прибамбасов

https://webjavascript.000webhostapp.com/test0106.html

https://webjavascript.000webhostapp.com/test0115.html

Наверно не сильна маленькие по размеру програмы и всё работает нормально у меня в браузере подключена десятка два юзер скриптов мной написаных очень длинных некоторые больше тысячи строк и нечего не кофликтует между собой

function func(){
....
func.i++;
...
}
func.i = 0;