Нужно ли нам обернуть код ES6 в IIFE?
В ES5 запись такого кода считается хорошей практикой:
(function () {
//some magic
})();
Но в ES6 переменные, созданные с ключевым словом let
, не привязаны к объекту window
.
Итак, есть ли необходимость в написании нашего кода в IIFE, или у него все еще есть некоторые цели, о которых я не слышал?
Ответы
Ответ 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;