Добро пожаловать в следующую статью моих заметок по JavaScript.

В этой статье мы поговорим о: функциях, IIFE, замыканиях

Все содержание взято из замечательного курса Йонаса Шмедтманна Полный курс JavaScript 2022: от нуля до эксперта!

Пожалуйста, купите курс, чтобы понять его содержание, это просто мои краткие заметки о курсе.

Немедленно вызываемые функциональные выражения (IIFE)

(function () {
console.log(‘This function will never run again’);
})();

здесь важны 2 вещи

  • Мы должны сделать оператор IIFE внутри круглых скобок, иначе выдается ошибка
  • Мы должны вызвать его сразу после создания, иначе мы не сможем вызвать его снова.

Он также имеет версию со стрелкой.

(() => console.log(‘This function ALSO will never run again’))();

Остерегайтесь скобок

Так зачем нам этот IIFE? Нам это нужно, потому что это помогает инкапсулировать данные и конфиденциальность данных.

Закрытия

Здесь происходит забавная вещь. Несмотря на то, что мы ушли из функции secureBooking, возвращаемая ею функция может получить доступ к своей переменной и увеличить ее? ВТФ верно?

ЛЮБАЯ ФУНКЦИЯ ВСЕГДА ИМЕЕТ ДОСТУП К ПЕРЕМЕННОЙ СРЕДЕ КОНТЕКСТА ВЫПОЛНЕНИЯ, В КОТОРОМ ФУНКЦИЯ СОЗДАНА.

Эта связь называется замыканием

Мы можем использовать console.dir для созданной нами анонимной функции.

Вот некоторые свойства анонимной функции

Те, что с двойными квадратными скобками, — это внутренние структуры, до которых мы не можем добраться. В свойстве scopes мы видим замыкание.

let f;
const c = function () {
const a = 23;
f = function () {
console.log(a * 2);
};
};
c();
f();

Сумасшествие здесь заключается в том, что даже если функция c покидает стек вызовов JS-движка со своими переменными, f все еще может получить доступ к своему содержимому и использовать его, и она даже не определена в c и не возвращается им.

const boardPassengers = (n, wait) => {
const perGroup = n / 3;
setTimeout(function () {
console.log(`We are now boarding all ${n} passengers`);
console.log(`We will accept them in ${perGroup} person groups`);
});
console.log(`We will start boarding in ${wait} seconds`);
};
boardPassengers(30, 2);

Это еще один пример закрытия, несмотря на то, что функция boardPassengers покидает стек вызовов, наша функция внутри setTimeout может получить доступ к своим переменным.

Посмотрите первую статью в этой ветке js notes!

См. предыдущую статью этой ветки js notes!

См. следующую статью в этой ветке js notes!

Подпишитесь на меня в Твиттере, чтобы не пропустить интересный контент😘

Почитайте обо мне и многих других замечательных технических блоггерах в разделе Dev Genius»