En fait, la clé du problème est que nous ne comprenons pas le rôle de la fonction call/apply. En termes officiels, cela signifie changer le contexte de portée, mais ici le contexte local est changé en fenêtre. En fait, appeler/appliquer est une méthode pour « tuer quelqu'un avec un couteau emprunté », c'est-à-dire que si vous n'avez pas un certain attribut ou une certaine méthode, et que vous souhaitez ensuite appeler les attributs ou les méthodes d'autres objets, c'est également une méthode d'implémentation de l'héritage d'objets.
En fait, il n'est pas nécessaire que ce soit Windows, et il est préférable d'utiliser call. Il vous suffit de déclarer var that=this dans f et d'écrire this de la fonction de fermeture comme ça. obtenez les variables d'environnement de la fonction supérieure. Vous ne pouvez qu'être venteux, donc la déclaration est ok. Si vous ne comprenez pas, vous pouvez me demander
S'il s'agit d'un front-end, la fonction a un paramètre invisible this, qui pointe par défaut vers la fenêtre des variables globales. Sauf si vous modifiez l'objet pointé par ceci, tel que foo.call (autres objets) La phrase originale utilise ce paramètre par défaut L'annotation indique clairement que cela pointe vers window
Je vais écrire quelques phrases supplémentaires, sinon je serai clair
var foo = function () {
console.log(this.x);
}
foo();为什么this指向window呢
De plus, la sémantique de ceci est de pointer vers l'objet qui appelle cette fonction. Chaque fonction nécessite un objet pour appeler obj.f() signifie que f est appelé par obj Si le front-end ne spécifie pas l'objet appelant, la valeur par défaut est la fenêtre de variable globale pour appeler la fonction
Lorsque JavaScript est conçu, ceci dans la fonction interne (c'est-à-dire la fonction dans le corps de la fonction) sera lié à l'objet global (c'est-à-dire la fenêtre). Je pense que le commentaire ici foo.call(window) devrait simplement utiliser le langage js pour expliquer pourquoi this.x dans. foo() affichera 10.
En fait, la clé du problème est que nous ne comprenons pas le rôle de la fonction call/apply. En termes officiels, cela signifie changer le contexte de portée, mais ici le contexte local est changé en fenêtre. En fait, appeler/appliquer est une méthode pour « tuer quelqu'un avec un couteau emprunté », c'est-à-dire que si vous n'avez pas un certain attribut ou une certaine méthode, et que vous souhaitez ensuite appeler les attributs ou les méthodes d'autres objets, c'est également une méthode d'implémentation de l'héritage d'objets.
En fait, il n'est pas nécessaire que ce soit Windows, et il est préférable d'utiliser call. Il vous suffit de déclarer var that=this dans f et d'écrire this de la fonction de fermeture comme ça. obtenez les variables d'environnement de la fonction supérieure. Vous ne pouvez qu'être venteux, donc la déclaration est ok. Si vous ne comprenez pas, vous pouvez me demander
.S'il s'agit d'un front-end, la fonction a un paramètre invisible this, qui pointe par défaut vers la fenêtre des variables globales.
Sauf si vous modifiez l'objet pointé par ceci, tel que foo.call (autres objets)
La phrase originale utilise ce paramètre par défaut
L'annotation indique clairement que cela pointe vers window
Je vais écrire quelques phrases supplémentaires, sinon je serai clair
De plus, la sémantique de ceci est de pointer vers l'objet qui appelle cette fonction.
Chaque fonction nécessite un objet pour appeler
obj.f() signifie que f est appelé par obj
Si le front-end ne spécifie pas l'objet appelant, la valeur par défaut est la fenêtre de variable globale pour appeler la fonction
Lorsque JavaScript est conçu, ceci dans la fonction interne (c'est-à-dire la fonction dans le corps de la fonction) sera lié à l'objet global (c'est-à-dire la fenêtre). Je pense que le commentaire ici
foo.call(window)
devrait simplement utiliser le langage js pour expliquer pourquoi this.x dans. foo() affichera 10.Il ne dit pas que le premier paramètre de foo.call doit être window. Le point principal de la question est de comprendre ce qu'est call.
https://developer.mozilla.org...
Vous pouvez comprendre les fonctions et les différences d'appel, d'application et de liaison