Doit créer une variable nommée _ce sont en conflit avec cette?
-
13-12-2019 - |
Question
C'est un très artificiel exemple, supposons que nous créons une variable _this
quelque part dans une fonction de classe.
class Person {
constructor (public name : string) {}
changeName(name) {
var _this = {};
(() => {
this.name = name;
})();
}
}
Cela ne fonctionne pas comme prévu lorsque nous appelons la changeName
fonction parce que la partie pertinente de la compilation de code ressemble à ceci:
var _this = this;
var _this = {};
(function () {
_this.name = name;
})();
Cela est mauvais en Javascript:nous avons deux var
les déclarations d'écraser les uns les autres.L' _this
créé par le compilateur est en train d'être remplacé par mon _this
.
Aussi loin que je peux voir, ce comportement n'est pas spécifié dans le fichier d'enregistrement spec.
Pourquoi devraient-ils en conflit?Ne peut pas le compilateur de détecter si j'ai créé une variable nommée _this
et le nom de l'générée automatiquement une autre chose, comme _this2
pour garder mes variables et l'généré par le compilateur ceux de piétiner les uns les autres?
La solution
Le compilateur va créer automatiquement _this
comme une référence à this
pour faciliter la fermeture qui sera créé en utilisant lambda de la syntaxe.Je suis sûr que j'ai lu cela dans le fichier d'enregistrement spécification quelque part, mais je serai d'accord que le compilateur doit émettre une erreur dans ce cas.
Je n'aime pas l'idée de le compilateur variant comment il émet un script javascript que cela entre en conflit avec l'objectif déclaré de la génération de "idiomatiques" (et prévisible) de javascript.
Autres conseils
N'est-ce pas ce que vous appelleriez un réservé variable?Je suppose que vous ne seriez pas déclarer une variable appelée "ceci" ou "document", soit.
Tant que MS est clair quant à ce que les variables réservées sont, je ne pense pas qu'il y a un problème majeur.Ils pourraient peut-être améliorer le compilateur à la sortie de mises en garde bien.