Devrait créer une variable nommée _this conflit avec cela?

voix
2

Ceci est un exemple très artificiel, mais supposons que nous créons une variable _thisquelque part dans une fonction de classe.

class Person {
  constructor (public name : string) {}
  changeName(name) {
    var _this = {};
    (() => {
      this.name = name;
    })();
  }
}

Cela ne fonctionnera pas comme prévu lorsque nous appelons la changeNamefonction parce que la partie pertinente du code compilé ressemble à ceci:

var _this = this;
var _this = {};
(function () {
  _this.name = name;
})();

Ce qui est mauvais Javascript: nous avons deux vardéclarations l'autre écrasant. Le _thiscréé par le compilateur est écrasé par mon _this.

Pour autant que je peux voir, ce comportement est spécifié dans la spécification dactylographiée.

Pourquoi devraient - ils en conflit? Ne peut pas détecter le compilateur si j'ai créé une variable nommée _thiset le nom d' autre généré automatiquement une chose, comme _this2de garder mes variables et celles générées par le compilateur de piétiner les uns des autres?

Créé 03/10/2012 à 15:08
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
7

Le compilateur crée automatiquement _thiscomme une référence à thisfaciliter la fermeture qui sera créé en utilisant la syntaxe lambda. Je suis sûr que je lis cela dans le cahier des charges dactylographiée quelque part, mais je suis d' accord que le compilateur devrait émettre une erreur dans ce cas.

Je n'aime pas l'idée du compilateur variable comment il émet javascript comme cela est en conflit avec l'objectif déclaré de générer javascript « idiomatiques » (et donc prévisible).

Créé 03/10/2012 à 15:27
source utilisateur

voix
0

Est-ce pas ce que vous appelleriez une variable réservée? Je suppose que vous ne seriez pas déclarer une variable appelée « ceci » ou « document » non plus.

Tant que MS est clair quant à ce que les variables réservées sont, je ne pense pas qu'il y ait un problème majeur. Ils pourraient peut-être améliorer le compilateur aux avertissements de sortie bien.

Créé 03/10/2012 à 15:27
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more