Что такое IIFE и как это работает [дубликат]

146
30 января 2021, 02:30
На этот вопрос уже даны ответы здесь:
Что в Javascript значит синтакс ( function(){…} )( param1, param2); ? (6 ответов)
Закрыт 1 год назад.

Последняя задача отсюда: https://learn.javascript.ru/closures-usage. Комментарии автора к решению совершенно меня запутали. Может кто-нибудь здесь поможет разложить в моей голове все по полочкам?

function makeArmy() { 
 
  var shooters = []; 
 
  for (var i = 0; i < 10; i++) { 
 
    var shooter = function(x) { 
 
      return function() { 
        console.log( x ); 
      }; 
 
    }(i); 
 
    shooters.push(shooter); 
  } 
 
  return shooters; 
} 
 
var army = makeArmy(); 
 
army[0](); 
army[5]();

Непонятен конкретно этот момент:

  var shooter = function(x) {
    return function() {
      console.log( x );
    };
  }(i);

Какую функцию вызывает вот это (i) и откуда x передается аргументом ?

Answer 1
  var shooter = function(x) {
    return function() {
      console.log( x );
    };
  }(i);

Код, который вас смутил, это IIFE.
По русски - Немедленно выполняемое функциональное выражение

Можно еще встретить такой вариант ( разницы нет ):

  var shooter = (function(x) {
    return function() {
      console.log( x );
    };
  })(i);

Работает это так: в переменную shooter запишется не сама функция, а ее результат, потому что мы после определения функции ее сразу же вызываем. Пример ваш можно переписать вот так

  function foo(x) {
    return function() {
      console.log( x );
    };
  }
  const i = 10;
  const shooter = foo(i);

Но, в примере с IIFE мы не загрязняем область видимости всякими foo, просто берем функцию, выполняем ее и забываем. Это полезно для создания замыканий, как например, в данном случае.

и откуда x передается аргументом

x аргумент берется как раз из последующего вызова (i)

READ ALSO
Написание функции по moveUp и moveDowm [дубликат]

Написание функции по moveUp и moveDowm [дубликат]

В консоли у меня все работаетТам для скрола вниз я ввожу:

151
Экспорт таблицы из сайта в excel

Экспорт таблицы из сайта в excel

Всем привет! У меня такой вопросНа собственном закрытом сайте есть таблица, которую время от времени надо экспортировать в excel

132
Присвоить ник клиенту на сервере WebSockets

Присвоить ник клиенту на сервере WebSockets

Имеется серверНа данный момент, каждому подключенному пользователю присваивается рандомный id,когда клиент отключается - его рандомный id удаляется...

137
Функции в js. Я запутался. Надо и ajax, и window.onload, и вернуть значение

Функции в js. Я запутался. Надо и ajax, и window.onload, и вернуть значение

Я по-прежнему плаваю в jsНужны Ваши пояснения, чтобы разобраться с функциями в js раз и навсегда

121