Je préface en disant que je sais que l'utilisation de with
est fortement déconseillée, et je n'ai pas l'intention de l'utiliser non plus. Je suis juste curieux d'apprendre comment cela fonctionne (j'essaie de comprendre la portée en javascript).Déclarations de variables dans un bloc avec
Si j'ai un code comme ceci:
function foo(obj) {
with (obj) {
b = 2;
}
}
var o1 = {
a: "something"
};
foo(o1);
console.log(o1.b) // This outputs undefined (makes sense)
console.log(b) // This outputs 2 (makes sense)
Cependant, si je change foo à quelque chose comme ceci:
function foo(obj) {
with (obj) {
var b = 2; // I use var b instead of b
}
}
Lorsque je passe o1 à toto, encore une fois, o1 n'a pas attribut b. Pourquoi est-ce? Je pensais que l'utilisation de var
déclarerait b dans la portée de obj, donc l'attribut serait créé à l'intérieur de o1 au lieu de dans la portée globale.