
JavaScript
глобальные/локальные переменные в JavaScript
Есть картинка в рамке и кнопка, по нажатию на которую меняется картинка. Переменная i сейчас объявлена вне функции, а используется в функции (глобальная). Так все работает, картинки меняются. Но я хочу как-то объявить переменную " i " в функции. По правилам, если объявлять переменные вне функции и потом их использовать в функции - плохо, приводит в больших программах к ошибкам. Я пробовал объявлять ее в функции, но переменная обнуляется при нажатии на кнопку. Соответственно, ставится только одна картинка - первая в массиве.


«По правилам, если объявлять переменные вне функции и потом их использовать в функции - плохо, приводит в больших программах к ошибкам.»
Ничего подобного: таких правил объективно не существует (цитата - это явно чье-то мнение, и вероятно необоснованное). К ошибкам приводит говнокод, а не лексическая область переменной. Если прогать чисто и аккуратно, то можно смело использовать глобальные переменные.
_
По вашему коду:
1. уберите HTML-комментарии из содержимого <script>, у комментов в JS другой синтаксис (// однострочный, и /* многострочный */).
2. инициализацию массива и переменной elem вынесите за пределы функции. Вообще, такое пишется либо в обработчике onload, либо в листенере load, чтобы не было ситуаций когда обращения к DOM выполняются до ее загрузки.
3. сначала алгоритм, и только затем код. Ваш алгоритм содержит ошибки - показ начинается со второго элемента массива, а пятое нажатие на кнопку приведет к выходу за диапазон. Код соответственно наследует эти баги, плюс добавляются его косяки, и в итоге получается полный треш. Торопиться не нужно, отложите практику и займитесь сначала теорией, основами... еще, попишите алгоритмы на бумажке. Это исключит "гипнотическое" влияние редактора с подсветкой синтаксиса, которое так негативно влияет на новичков.
Ничего подобного: таких правил объективно не существует (цитата - это явно чье-то мнение, и вероятно необоснованное). К ошибкам приводит говнокод, а не лексическая область переменной. Если прогать чисто и аккуратно, то можно смело использовать глобальные переменные.
_
По вашему коду:
1. уберите HTML-комментарии из содержимого <script>, у комментов в JS другой синтаксис (// однострочный, и /* многострочный */).
2. инициализацию массива и переменной elem вынесите за пределы функции. Вообще, такое пишется либо в обработчике onload, либо в листенере load, чтобы не было ситуаций когда обращения к DOM выполняются до ее загрузки.
3. сначала алгоритм, и только затем код. Ваш алгоритм содержит ошибки - показ начинается со второго элемента массива, а пятое нажатие на кнопку приведет к выходу за диапазон. Код соответственно наследует эти баги, плюс добавляются его косяки, и в итоге получается полный треш. Торопиться не нужно, отложите практику и займитесь сначала теорией, основами... еще, попишите алгоритмы на бумажке. Это исключит "гипнотическое" влияние редактора с подсветкой синтаксиса, которое так негативно влияет на новичков.
используй input c типом hidden
(По правилам, если объявлять переменные вне функции и потом их использовать в функции - плохо, приводит в больших программах к ошибкам)
Кто тебе такую ересть сказал ?
Забудь про слова var let они зобствена могут конечно пригодится но крайне редко Обявляй все переменные
как глобальные движок вывезет поверь на слово
вот мои наброски там код влажен ты внём видешь где нибуть использование var let и тому подобных прибамбасов
https://webjavascript.000webhostapp.com/test0106.html
https://webjavascript.000webhostapp.com/test0115.html
Наверно не сильна маленькие по размеру програмы и всё работает нормально у меня в браузере подключена десятка два юзер скриптов мной написаных очень длинных некоторые больше тысячи строк и нечего не кофликтует между собой
⚤
Кто тебе такую ересть сказал ?
Забудь про слова var let они зобствена могут конечно пригодится но крайне редко Обявляй все переменные
как глобальные движок вывезет поверь на слово
вот мои наброски там код влажен ты внём видешь где нибуть использование var let и тому подобных прибамбасов
https://webjavascript.000webhostapp.com/test0106.html
https://webjavascript.000webhostapp.com/test0115.html
Наверно не сильна маленькие по размеру програмы и всё работает нормально у меня в браузере подключена десятка два юзер скриптов мной написаных очень длинных некоторые больше тысячи строк и нечего не кофликтует между собой
⚤
function func(){
....
func.i++;
...
}
func.i = 0;
....
func.i++;
...
}
func.i = 0;
Похожие вопросы
- Как удалить переменную в javascript ?
- Вопрос по типу переменной на javascript
- Помогите с JavaScript (локальные/глобальные переменные/функции)
- Локальные и глобальные переменные
- Целесообразно ли хранение синтаксиса javascript в переменной?
- JavaScript. Как проверить, была ли определена переменная?
- Видимость переменной JavaScript
- JavaScript как правильно присвоить дату в переменную?
- Javascript, как быть с переменными?
- Как объявить глобальную переменную внутри функции в js?
Просто я иду по учебнику (только начал работу с DOM) и там был такой пункт про глобальные переменные, там было написано, что можно использовать "use strict". Думаю, вы знаете, что это. поэтому я и стараюсь пока не использовать глобальные переменные.
Проблема-то остается с переменной " i "
ссылка на фото в хорошем качестве - https: //hkar.ru /TNG8