Теперь это проблема, но я бы сказал, что по этой общей идее все еще есть причина.
Теоретически можно, скажем, какой-либо библиотеки третьей стороной писать код, как это следующим образом:
let count = 0;
function getCount() {
return count++;
}
Теперь, если вы пытались создать свою собственную count
переменную в той же области, вы» d получает сообщение об ошибке:
// 3rd-party
let count = 0;
function getCount() {
return count++;
}
// Your code
let count = 1;
Однако, вы можете сделать чистый код, используя фактические Ли cks вместо IIFE.
// Still bad 3rd party
let count = 0;
function getCount() {
return count++;
}
// Your code
{
let count = 10;
console.log(count);
console.log(getCount());
console.log(count);
console.log(getCount());
}
В будущем, вы должны быть в состоянии инкапсулировать код в модулях, которые будут иметь свои собственные рамки, и вы не должны обернуть свой код в IIFE или блока.
Связанный: [Namespacing with IIFE in ES6?] (Http://stackoverflow.com/questions/32746615/namespacing-with-iife-in-es6) –
См. Также [Будет const и пусть шаблон IIFE не нужен? ] (http://stackoverflow.com/q/33534485/1048572) – Bergi
«* переменные, созданные с помощью ключевого слова' let', не привязаны к объекту 'window' *, но они все еще глобальны. Поэтому, если вы пишете скрипты, вам нужно будет поместить их в блок или IIFE. – Bergi