setters getters es6 ecmascript and javascript ecmascript-6 encapsulation iife

javascript - getters - ¿Necesitamos envolver el código ES6 en un IIFE?



js es6 getter setter (2)

En ES5, escribir dicho código ha sido considerado como una buena práctica:

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

Pero en ES6 las variables creadas con la palabra clave let no se adjuntan al objeto de window .

Entonces, ¿hay alguna necesidad ahora de escribir nuestro código en un IIFE, o todavía tiene algunos propósitos que no conozco?


Es un problema menor ahora, pero diría que todavía hay una razón para esa idea general.

Teóricamente, es posible que, por ejemplo, alguna biblioteca de terceros escriba un código como el siguiente:

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

Ahora, si intentara crear su propia variable de count en el mismo ámbito, obtendría un error:

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

Sin embargo, puede hacer que el código sea más limpio utilizando bloques reales en lugar de 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()); }

En el futuro, debería poder encapsular su código en módulos que tendrán su propio alcance y no necesitará envolver su código en un IIFE o un bloque.


Si está usando módulos, no es necesario usar IIFE (así se llama a este "contenedor"), porque todas las variables tienen un alcance limitado al módulo.

Sin embargo, todavía hay algunos casos en los que desea separar una parte del código de otra, y luego puede usar IIFE.

Por supuesto, si está utilizando let o const , puede usar una instrucción de bloque en lugar de IIFE:

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

Vea la pregunta relacionada en Programmers.SE: ¿Hasta dónde debe llegar la encapsulación en JavaScript? .