Salut J'ai le code JavaScript suivant que j'essaie de lancer. Mon but est de saisir la signification de this
dans différentes portées et différents types d'invocations en JavaScript.Confusion avec "cet" objet dans les fonctions anonymes de JavaScript
Si vous regardez dans le code ci-dessous: J'ai une fonction interne anonyme, qui est affectée à la variable innerStuff
. Dans cette fonction anonyme en tant que telle this
points à window
objet et non l'objet fonction externe ou toute autre chose. Événement bien qu'il ait toujours accès aux variables de la fonction out.
De toute façon, je ne suis pas sûr, pourquoi ce serait; mais si vous regardez le code ci-dessous, je passe this
sous la forme de that
à innerStuff
plus tard et cela fonctionne très bien et imprime l'objet avec l'attribut doofus
dans la console.
var someStuff = {
doofus:"whatever",
newF: function()
{
var that = this;
console.log(that);
var innerStuff = function(topThis){
console.log(topThis);
};
return innerStuff(that);
}
}
someStuff.newF();
Maintenant, je ne change que peu de code. Et au lieu d'assigner à innerStuff
, je vais juste retourner directement la fonction en invoquant comme indiqué ci-dessous:
var someStuff = {
doofus:"whatever",
newF: function()
{
var that = this;
console.log(that);
return function(that){
console.log(that);
}();
}
}
someStuff.newF();
Cette impression indéfinis pour la fonction anonyme interne. Est-ce parce qu'il y a un conflit entre un that
qui est passé en paramètre et un that
défini en fonction externe? Je pensais que le paramètre aurait outrepassé la visibilité. Pourquoi la valeur ne serait-elle pas conservée?
Ceci est complètement déroutant. Par contre, si je ne réussis pas that
, mais que je l'utilise à la place, parce que la visibilité est là, le résultat est correct et comme prévu.
Qu'est-ce qui me manque? Est-ce le conflit entre les variables, présentes dans la même portée? Y at-il une bonne raison, que les fonctions internes ont this
lié à l'objet window
?
ah !! Je ne peux pas croire que j'ai raté ça. Merci beaucoup. – Priyank
Eh bien, c'est * complètement * différent de la façon dont les méthodes liées fonctionnent dans tous les autres langages qui les ont ... – bobince