Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Работа в конкретном блоке. (https://javascript.ru/forum/misc/84809-rabota-v-konkretnom-bloke.html)

рони 21.02.2023 16:04

Сергей Ракипов,
по ссылке даже пример есть, какое значение имеет i в каждый момент работы функции callback, в вашем случае это createCollapse.

voraa 21.02.2023 17:04

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

Сергей Ракипов 22.02.2023 07:11

Ладно я не буду донимать.
Я читаю и не только эти ресурсы в ссылках.
И я знаю что значит i это индекс или порядковое число элемента, начинается с нуля.
Мой вопрос не в этом был. Просто логику не понимаю JS как он решает .
Ну ладно с практикой наберусь.

voraa 22.02.2023 07:24

Так логика как раз и связана с замыканием.
Есть функция, которая вызывается внутри 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')
            }

Сергей Ракипов 22.02.2023 10:17

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


Часовой пояс GMT +3, время: 14:16.