Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не срабатывает цикл for 
:(
    Опции темы
denisalekss
Дата 31.1.2021, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.12.2020

Репутация: нет
Всего: нет



Почему код срабатывает только тогда когда 
Код
var i = 0;
 поменять на 
Код
let i = 0;
?
Если оставить код как есть вывод:

Код

fib[6] = undefined


Сам код:

Код

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
const fib = [1,2,3,5,8,13]
for(var i = 0; i < fib.length; i++){
    setTimeout(function() {
        console.log(`fib[${i}] = ${fib[i]}`)
    },1500)
}

    </script>
</body>
</html>



Вот такой код:

Код
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
const fib = [1,2,3,5,8,13]
for(var i = 0; i < fib.length; i++){
    (function(j){
    setTimeout(function() {
        console.log(`fib[${i}] = ${fib[i]}`)
    },1500)
    })(i)
}

    </script>
</body>
</html>

 выдаст также 
Код

fib[6] = undefined

PM MAIL   Вверх
Oldshelf
Дата 1.2.2021, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 22.4.2018

Репутация: нет
Всего: 3



При использовании var сохраняется ссылка на переменную, а не её значение, как в случае с let. Цикл отрабатывает, i становится равной 6 и затем вызываются Timeout'ы, принимающие данное значение. Если объявить переменную через let, то в функцию, сразу при её вызове, будут передаваться значения переменной.

Кстати, во 2-ом примере нужно на 10-ой строке заменить j на i:
Код

(function(i){

- тогда будет взята локальная, а не глобальная переменная i, со значением на момент определения SetTimeout'ов.
PM MAIL WWW   Вверх
_zorn_
Дата 2.4.2021, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1024
Регистрация: 21.8.2007

Репутация: 1
Всего: 12



Банальная опечатка. Частенько такое было когда "почему не работает" )

Это сообщение отредактировал(а) _zorn_ - 2.4.2021, 20:46
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1135 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.