JavaScript devrait être l'une des langages multiplateformes les plus populaires maintenant. J'ai joué avec des choses intéressantes sur le front, mais j'ai trouvé que je ne maîtrisais pas bien cette langue. J'étais un peu insouciant, donc je voulais profiter du temps que j'ai le temps d'ajouter des choses manquantes.
Cette liaison cachée
Au début, c'était quelque chose dont j'étais confus, mais quand je l'ai vu pour la première fois, je ne comprenais pas. Ensuite, dans des situations similaires, le même problème peut être résolu par des méthodes similaires. J'ai donc essayé de régler les connaissances pour une recherche facile.
Il s'agit d'une erreur de conception de la langue JavaScript, mais il semble que cette erreur soit inévitable, les fonctions sont des objets, les tableaux sont des objets, etc. Citez des exemples de "JavaScript: les bonnes parties"
La copie de code est la suivante:
fonction Add (a, b) {return a + b}
var sum = add (3,4);
console.log (sum); // sum = 7
À l'heure actuelle, le résultat de la somme est de 7.
La copie de code est la suivante:
> type d'ajout
> 'numéro'
Comme vous pouvez le voir ici, le type d'ajout est une valeur numérique.
Lorsque vous appelez une fonction dans ce mode, cela est lié à une variable globale.
C'est-à-dire dans l'environnement actuel, nous pouvons appeler cela de cette manière
La copie de code est la suivante:
this.add (3,4)
Il s'agit de la liaison implicite de cela, et cela sera lié de différentes manières.
La copie de code est la suivante:
var hello = function () {
retourner "bonjour", + this.name;
};
name = 'this';
console.log (bonjour ());
Ensuite, nous aurons bonjour, ceci. Et quand
La copie de code est la suivante:
var hello = function () {
retourner "bonjour", + this.name;
};
var user = {
Bonjour: Bonjour,
Nom: «Phodal»,
};
console.log (user.hello ());
Pour le moment, le Hello in User pointe la fonction Hello, et dans notre compréhension, comment est-ce possible? C'est donc un bug.
Si nous définissons une variable dans cette méthode et y attribuons cette valeur, la fonction interne peut y accéder via cette variable.
var ça = ceci
Ainsi, lorsque la situation est un peu plus compliquée, nous devons utiliser:
La copie de code est la suivante:
Vat that = this;
Conseils:
1. La portée de cette variable est toujours déterminée par sa fonction d'enclosage la plus proche.
2. Utilisez une variable locale (comme moi, Self, That) pour rendre cette liaison disponible en interne.
Un exemple simple:
La copie de code est la suivante:
var m = fonction () {
this.name = "m";
};
var mm = fonction () {
z = new M ();
this.name = "mm";
z.printname = function () {
console.log (this.name);
};
return z.printName ();
};
var mm = nouveau mm;
À l'heure actuelle, cela pointe vers la fonction M, qui est le MM lui-même. Si nous supprimons cela de M, alors le retourné non défini. Nous créons donc un alias pour la portée actuelle de cela, tel que cela ou soi, etc .:
La copie de code est la suivante:
var mm = fonction () {
z = new M ();
this.name = "mm";
var self = this;
z.printname = function () {
console.log (self.name);
};
return z.printName ();
};
De cette façon, vous pouvez retourner un MM. De plus, la méthode de liaison de la fonction de rappel peut être utilisée dans ES5.
La copie de code est la suivante:
var mm = fonction () {
z = new M ();
this.name = "mm";
z.printname = function () {
console.log (this.name);
} .bind (this);
return z.printName ();
};
La liaison peut lier des méthodes au récepteur.
autre
Un autre bonjour, monde
J'ai rencontré Print ('Hello') ('World') par hasard, puis j'ai publié 'Hello, World'.
Les fonctions dites d'ordre supérieur semblent très utiles. Si vous êtes intéressé, vous pouvez consulter le prochain article.