Что такое IIFE в JavaScript?

Узнайте, что такое выражение немедленно вызываемой функции, за пять минут или меньше!

Услышав термин "Выражение немедленно вызванной функции" (также известный как IIFE) и внезапно почувствовав себя мусором из-за непонимания, также совершенно нормально, потому что языки программирования часто переполнены элитарными терминами, чтобы вещи казались более сложными, чем они есть на самом деле.

Также совершенно нормально не знать, в чем разница между использованием этой функции вместо традиционной. Давайте попробуем развенчать все это так, чтобы чувство неуверенности в использовании IIFE ушло в прошлое!

Предупреждение о плохой шутке: «сомнительно» - прилагательное, которое означает «полон неопределенности; сомнительно ».

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

Вы часто (но не всегда) увидите IIFE, используемые в фреймворках / библиотеках, таких как jQuery. Они часто оборачивают весь код своей инфраструктуры / библиотеки внутри IIFE, чтобы защитить область действия его переменных, а также убедиться, что все выполняется без каких-либо действий со стороны пользователя.

В любом случае, давайте посмотрим на быстрый пример функции и почему может быть полезно превратить ее в IIFE:

// Normal function
function addTogether() {
 var x = 20;
 var y = 20;
 var answer = x + y;
 console.log(answer);
 }
addTogether();

Итак, у нас есть функция, которая просто складывает значения var x и var y. Затем мы вызываем функцию вскоре после этого. С этого момента мы можем вызывать функцию addTogether сколько угодно раз.

Но, возможно, это нежелательно, и мы просто хотим вызвать функцию, чтобы получить результат, но это все - мы никогда не захотим использовать ее снова и не хотим, чтобы наша программа когда-либо могла случайно получить доступ Это.

Теперь первое, что следует здесь упомянуть, это то, что в приведенном выше примере наши переменные безопасны - безопасны, поскольку они неизменяемы (это просто причудливый технический термин, означающий, что они не могут быть изменены в будущее).

Так что это здорово, к нашим переменным нельзя получить доступ, но как сделать так, чтобы к нашей функции тоже нельзя было получить доступ?

Вот тут-то и пригодятся IIFE.

Итак, первое, что мы делаем, это заключаем в скобки всю нашу функцию addTogether, например:

(function addTogether() {
 var x = 20;
 var y = 20;
 var answer = x + y;
 console.log(answer);
 });

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

Выражение функции!

В любом случае, поскольку мы создаем одно из тех функций-выражений, которые я только что сказал примерно десять раз, нам больше не нужно давать функции имя, потому что план таков, что как только мы создадим IIFE , мы не собираемся снова вызывать функцию. Так что давайте избавимся от имени:

(function() {
 var x = 20;
 var y = 20;
 var answer = x + y;
 console.log(answer);
 });

Ладно, мы почти у цели.

Наконец, нам нужен способ вызова этой функции, но как это сделать сейчас, учитывая, что у нас нет имени, на которое можно было бы ссылаться? Ну, мы просто добавляем пару скобок в конце функции (но непосредственно перед точкой с запятой), например:

(function() {
 var x = 20;
 var y = 20;
 var answer = x + y;
 console.log(answer);
 })();

И вот он, ваш собственный IIFE!

Так что теперь больше не нужно сомневаться в использовании IIFE.

Если вы хотите узнать больше о IIFE, на веб-сайте MDN есть красивый глоссарий о них (имейте в виду, что они используют много технических терминов).

Если вы нашли это полезным, не забудьте оставить несколько аплодисментов. И следуйте за нами, будьте как дома, поднимите ноги!

TL;DR

Выражение немедленно вызываемой функции - хороший способ защитить область действия вашей функции и переменных в ней.

Понравилась эта статья? Если да, то получите больше похожего контента, подписавшись на наш канал YouTube!

Больше контента на plainenglish.io