Подтвердить что ты не робот

Нужно ли нам обернуть код ES6 в IIFE?

В ES5 запись такого кода считается хорошей практикой:

(function () {
    //some magic
})();

Но в ES6 переменные, созданные с ключевым словом let, не привязаны к объекту window.

Итак, есть ли необходимость в написании нашего кода в IIFE, или у него все еще есть некоторые цели, о которых я не слышал?

4b9b3361

Ответ 1

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

Однако все же есть некоторые случаи, когда вы хотите отделить одну часть кода от другой, а затем вы можете использовать IIFE.

Конечно, если вы используете let или const, вы можете использовать оператор блока вместо IIFE:

{
  let something = 1;
  const somethingElse = 2;
}
console.log(something); // ReferenceError: something is not defined

Смотрите связанный с этим вопрос в Programmers.SE: Как далеко должно пройти инкапсуляция в JavaScript?.

Ответ 2

Теперь это не проблема, но я бы сказал, что все еще есть причина для этой общей идеи.

Теоретически, возможно, для некоторых сторонних библиотек можно написать следующий код:

let count = 0;
function getCount() {
  return count++;
}

Теперь, если вы попытались создать свою собственную переменную count в той же области, вы получите сообщение об ошибке:

// 3rd-party
let count = 0;
function getCount() {
  return count++;
}

// Your code
let count = 1;