Рубрики
Без рубрики

Нет, я не знаю, какие закрытия … пока

закрываясь на закрытиях. Теги с JavaScript.

Я хочу поделиться интересным укомплектованием, который я узнал на закрытиях. Путешествие на этот урок все началось, когда я прокомментировал PR, а автор PR сказал, что добавил дополнительный () на функцию Это. HandleToggle. Как функция была закрытием. Это царапало мой мозг на некоторое время. Я имею в виду, я знал, какие закрытия были или хотя бы идея об этом. Я решил записать его в моей запиской, когда я вернулся к ней позже. Затем я вспомнил, как мой друг рекомендовал, я начну здесь когда смотрите в js. Я быстро пошел на этот репо Github и искал главу о закрытиях. Определение текстового книги я думал, что найду бы, не было там. Тем не менее, Кайл Симпсон использовал примеры и объяснил «Мне, как я 5 лет», я понял концепцию.

Интересный фрагмент кода, который сбил меня с толку, хотя это было

for (var i=1; i<=5; i++) {
    setTimeout(() => {
        console.log( i );
    }, 100 );
}

который вы можете подумать, распечатываются

1
2
3
4
5

Это на самом деле отпечатывает 6 пять раз на консоли. Попробуй это. Странный ? Не совсем. Я просто хотел увидеть вышеуказанный вывод. Я играл с ним и все еще получил 6 пять раз на консоли. Почему не продолжал читать, потому что я подумал, что знал, что то, что я сразу читал, было достаточно, чтобы попробовать пример петли без чтения дальше. Я даже добавил 0, чтобы придеться время ожидания не иметь никакой задержки. Неудачно! Я продолжил читать книгу Кайла Симпсонов и узнал, что у него было решение этого. Оказывается, что я мог сделать (и многие разработчики) пытался к

Подразумевая, что каждая итерация петли «захватывает» свою собственную копию I, во время итерации. Но, как работает, все 5 из этих функций, хотя они определяются отдельно в каждой итерации петли, все закрыты над тем же общим глобальным объемом, который, на самом деле, только один в нем.

Кайл Симпсон предоставил решение либо с использованием IIFE или SHING ES6 вар , Пусть Отказ

используя iife.

for (var i=1; i<=5; i++) {
    (function(j){
        setTimeout(() => {
            console.log( j );
        }, j );
    })( i );
}

Использование позволять

for (let i=1; i<=5; i++) {
    setTimeout(() => {
        console.log( i );
    }, 100 );
}

Я подошел к старшему разработку, и он объяснил только тот же вопрос, который подчеркивает, насколько опасны var возможно. var поднимал ценность I и поэтому значение 6 всегда печатается. Что я забыл спросить, это это. Для фрагмента первого кода – это вся цикл работает так, что VAR доходит до 6, а затем выполняет все Settimeouts позже, а затем отображение 6 как значение i?

Наконец, какие закрытия являются:

Те, кто любит крюк на определение, я сделал маленькую копание и пост Эрика Эллиота, который хорошо объясняет это здесь Отказ

Эрик Эллиот Закрытие - это сочетание функции, объединенной вместе (прилагаемому) со ссылками на его окружающее состояние (лексическая среда). Другими словами, закрытие дает вам доступ к объему внешней функции из внутренней функции.

Я получил доступ к одному из видео Кайла Симпсона, и он объясняет, как следует

Закрытие – это когда функция «запоминает» ее лексическую область, даже если эта функция выполнена хорошо вне ее лексической области.

Я надеюсь, что они имеют смысл и я призываю вас читать больше на «Вы не знаете JS, закрытие» Оставьте интервью JavaScript: что такое закрытие?

Оригинал: “https://dev.to/hawicaesar/no-i-dont-know-what-closures-areyet-568”