Skal lage en variabel som heter _this konflikt med dette?

stemmer
2

Dette er en veldig contrived eksempel, men la oss anta at vi oppretter en variabel _thissted i en klasse funksjon.

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

Dette vil ikke fungere som forventet når vi kaller changeNamefunksjonen fordi den relevante delen av den kompilerte koden ser slik ut:

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

Dette er dårlig Javascript: vi har to varerklæringer overskriving av hverandre. Den _thiser laget av kompilatoren blir overskrevet av min _this.

Så vidt jeg kan se, er dette problemet ikke spesifisert i Loggfila spec.

Hvorfor skulle de komme i konflikt? Kan ikke kompilatoren oppdage hvis jeg har opprettet en variabel kalt _thisog navngi den automatisk genererte en noe annet, liker _this2å holde mine variabler og kompilatoren generert seg fra å tråkke på hverandre?

Publisert på 03/10/2012 klokken 14:08
kilden bruker
På andre språk...                            


2 svar

stemmer
7

Kompilatoren vil automatisk skape _thissom en referanse for thiså lette lukking som blir opprettet ved hjelp av lambda syntaks. Jeg er ganske sikker på at jeg leste dette i Loggfila spesifikasjonen et sted, men jeg er enig at kompilatoren skal avgi en feil i dette tilfellet.

Jeg liker ikke tanken på kompilatoren varierende hvor den avgir javascript da dette er i strid med den uttalte mål om å generere "idiomatisk" (og dermed forutsigbar) javascript.

Svarte 03/10/2012 kl. 14:27
kilden bruker

stemmer
0

Er det ikke det du vil kalle en reservert variabel? Jeg antar at du ikke ville erklære en variabel kalt "dette" eller "dokument" heller.

Så lenge MS er klar på hva de reserverte variablene er, tror jeg ikke det er et stort problem. De kunne kanskje forbedre kompilatoren til utgang advarsler skjønt.

Svarte 03/10/2012 kl. 14:27
kilden bruker

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