BenderIsGreat34
@BenderIsGreat34
junior front-end

Нужно ли использовать iife?

Изучаю замыкания и наткнулся на такое понятие как iife. Но очень много устаревшей информации, в конце-концов на learn-js наткнулся на
Это не то, что мы должны использовать сегодня, но, так как вы можете встретить это в старых скриптах, полезно понимать принцип работы.
и стало интересно, действительно ли этот способ считается устаревшим?
Если я правильно понимаю, сейчас используются замыкания, для тех целей, которым служил iife. Так же часть проблем, которые решал iife теперь решаются при помощи нововведений в es (всякие let, const, forEach и.т.д)
  • Вопрос задан
  • 476 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
С появлением в ES6 let и const – объявлений с блочной областью видимости – без IIFE можно обходиться там, где их заводили только ради чистоты глобальной о.в.:
// раньше
(function(){
  var a = 1;
  var b = 2;
  b *= 2;
  console.log(a + b);
})();
// здесь a и b уже не видны


// теперь можно просто заключить часть кода в "блок"
// и все переменные останутся в Вегасе:
{
  const a = 1;
  let b = 2;
  b *= 2;
  console.log(a + b);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
iife и есть способ использовать замыкания. Лично я давно её на практике не использовал, но необходимо судить по ситуации.

Да и в скомпиленном коде всякие классы и леты могут реализовываться через iife
Ответ написан
Xuxicheta
@Xuxicheta
инженер
пока не приняли это https://github.com/tc39/proposal-do-expressions можно использовать iife как замену
let name = 'vasya';
if (cond1) {
  name = 'pavlek';
}
if (cond2) {
  name = 'semen';
}

мы можем убрать let использовав iife
const vasya = (() => {
  switch (true) {
    case cond2: return 'semen';
    case cond1: return 'pavlek';
    default: return 'vasya';
  }
})()


Пример может не идеален (вообще надо бы именованную функцию), но я иногда так делаю. Наглядней, чем let и цепочка условий.

Замыкания тут вообще не причем, любая функция в js образует замыкание, и iife конечно в том числе. В моем примере вот оно используется, но это не является обязательным.
Ответ написан
Комментировать
сейчас используются замыкания, для тех целей, которым служил iife.

Вместо iife используют модули, единственный случай, когда вместо iife используют let - асинхронный цикл. Замыкания в JS были всегда, в том числе когда вместо модулей использовали iife
Кстати замыкание это не обязательнофункция обернутая в функцию, любая функция создает замыкание - замыкает в себе от уборщика мусора переменные из внешнего скоупа, которые сама использует.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы