/ / Quel est le moyen le plus court possible pour écrire une portée de bloc en JavaScript? - javascript, scope

Quel est le moyen le plus court possible pour écrire une portée de bloc en JavaScript? - javascript, scope

Est-ce le moyen le plus court possible d’obtenir une portée de bloc dans le corps de la for boucle?

x = {};
for (i of ["a", "b"]) {
(function(i) {
x[i] = function() { this.v = i; }
})(i);
}

Ou y a-t-il un sucre syntaxique que je ne parviens pas à trouver?

Explication:

Avec la portée du bloc, les objets créés ont des valeurs différentes.

new x.ax.(anonymous function) {v: "a"}
new x.bx.(anonymous function) {v: "b"}

Sans portée de bloc

y = {};
for (i of ["a", "b"]) {
y[i] = function() { this.v = i; }
}

les objets créés auront la même valeur.

new y.ay.(anonymous function) {v: "b"}
new y.by.(anonymous function) {v: "b"}

Réponses:

2 pour la réponse № 1

Étant donné que vous utilisez un ES6 for of En tout cas, vous avez déjà une portée de bloc pour votre variable d’itération - n’oubliez pas d’utiliser un let/const déclaration! Il n'y a pas besoin d'un IEFE.

let x = {};
for (let i of ["a", "b"])
x[i] = function() { this.v = i; };

Si vous n’utilisez pas l’ES6, je vous recommande d’utiliser l’un des Array méthodes d'itération, comme

var x = ["a", "b"].map(function(i) {
return function() { this.v = i; };
});