Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 21.02.2023, 16:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сергей Ракипов,
по ссылке даже пример есть, какое значение имеет i в каждый момент работы функции callback, в вашем случае это createCollapse.
Ответить с цитированием
  #22 (permalink)  
Старый 21.02.2023, 17:04
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Тут не только про forEach, тут и про замыкания надо знать.
https://learn.javascript.ru/closure
https://developer.mozilla.org/ru/doc...cript/Closures

Последний раз редактировалось voraa, 21.02.2023 в 17:11.
Ответить с цитированием
  #23 (permalink)  
Старый 22.02.2023, 07:11
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

Ладно я не буду донимать.
Я читаю и не только эти ресурсы в ссылках.
И я знаю что значит i это индекс или порядковое число элемента, начинается с нуля.
Мой вопрос не в этом был. Просто логику не понимаю JS как он решает .
Ну ладно с практикой наберусь.
Ответить с цитированием
  #24 (permalink)  
Старый 22.02.2023, 07:24
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

Так логика как раз и связана с замыканием.
Есть функция, которая вызывается внутри forEach
const createCollapse = (button, i) => {
 
            button.addEventListener('click', () => {
                content[i].classList.toggle('collapse__content_open')
            })
        }

Она вызывается два раза. Первый раз i = 0, второй раз i = 1.
Внутри нее создается функция
() => {
                content[i].classList.toggle('collapse__content_open')
            }

Каждый раз создается новая функция. Они использует это i. Но каждая из них использует то i, которое было в ее лексическом окружении в момент создания этой функции. (Это и называется замыканием)
Получаются две функции. Одна (для первого дива)
() => {
                content[0].classList.toggle('collapse__content_open')
            }

Другая (для второго дива)
() => {
                content[1].classList.toggle('collapse__content_open')
            }

Последний раз редактировалось voraa, 22.02.2023 в 07:26.
Ответить с цитированием
  #25 (permalink)  
Старый 22.02.2023, 10:17
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 651

voraa,
Очень доходчиво спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа скрипта в на конкретном блоке BigNewGod jQuery 4 30.08.2017 15:03
Сложная работа Тыжпрограммиста myxosran jQuery 9 04.04.2017 14:16
Вакансия: Программист IOS, работа в офисе,г.Ростов-на-Дону Анна NikitaOnline Работа 0 21.03.2016 18:45