Allez directement au code :
var test = {
outer: function () {
// 此时this指向test对象
console.log(this);
function inner() {
// 此时this指向window
console.log(this);
}
inner();
}
}
Quelle est la raison pour laquelle ce point du code ci-dessus est différent ?
Je comprends très bien maintenant, donnez-moi une réponse s'il vous plaît !
En excluant les emprunts de fonctions et les fonctions de constructeur, il n'en reste que deux types, l'un est une fonction ordinaire et l'autre est une méthode objet.
Les méthodes d'objet pointent vers l'objet, les fonctions ordinaires pointent vers le global
Celui qui appelle cette fonction, alors
Le pointage dethis
indique qui.
pointe versthis
的指向只和你如何调用这个函数有关,比如你说第一个this
指向test
,这可不一定,有的是办法把这个this
的指向改掉。只有当你运行test.outer()
的时候,第一个this
才会指向test
est uniquement lié à la façon dont vous appelez cette fonction. Par exemple, si vous dites que le premiertest
, ce n'est pas nécessairement vrai. Il existe des moyens de modifier le pointage de. 🎜. Ce n'est que lorsque vous exécuteztest.outer()
que le premier 🎜 pointe verstest
. 🎜/a/11...
Il s'agit d'un problème de fermeture. Lorsqu'un objet se voit attribuer des attributs via des littéraux d'objet, y compris une méthode de fonction, cette méthode de fonction a une sortie de console, puis une fonction est déclarée dans cette fonction, un problème de fermeture se forme. Fermeture Dans des circonstances normales. , cela pointe vers la fenêtre. Dans des circonstances particulières, vous pouvez modifier la valeur de ceci. Vous pouvez lire un article que j'ai écrit sur la fermeture des paquets. Vous obtiendrez des informations sur les inconvénients du téléphone mobile.
En fait, ce n’est pas bien de répondre anonymement ! La fonction définie à l'intérieur de la fonction dans l'objet ne peut pas obtenir directement la variable d'environnement de niveau supérieur, encore moins celle-ci à l'intérieur. Vous devez définir une variable pour elle, telle que var that=this de cette manière, vous pouvez obtenir le supérieur-; niveler cet objet ;
var test = {