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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top