¿La creación de una variable llamada _this debería entrar en conflicto con esto?

StackOverflow https://stackoverflow.com//questions/12710303

  •  13-12-2019
  •  | 
  •  

Pregunta

Este es un ejemplo muy artificial, pero supongamos que creamos una variable _this en algún lugar de una función de clase.

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

Esto no funcionará como se esperaba cuando llamemos al changeName funciona porque la parte relevante del código compilado se ve así:

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

Este es un Javascript incorrecto:tenemos dos var declaraciones que se sobrescriben entre sí.El _this creado por el compilador está siendo sobrescrito por mi _this.

Por lo que puedo ver, este comportamiento no está especificado en la especificación de TypeScript.

¿Por qué deberían entrar en conflicto?¿No puede el compilador detectar si he creado una variable llamada _this y nombre el generado automáticamente de otra manera, como _this2 ¿Para evitar que mis variables y las generadas por el compilador se pisoteen entre sí?

¿Fue útil?

Solución

El compilador creará automáticamente _this como referencia a this para facilitar el cierre que se creará mediante el uso de la sintaxis lambda.Estoy bastante seguro de haber leído esto en alguna parte de la especificación de TypeScript, pero estoy de acuerdo en que el compilador debería emitir un error en este caso.

No me gusta la idea de que el compilador varíe la forma en que emite JavaScript, ya que esto entra en conflicto con el objetivo declarado de generar JavaScript "idiomático" (y, por lo tanto, predecible).

Otros consejos

¿No es lo que llamarías una variable reservada?Supongo que tampoco declararías una variable llamada "este" o "documento".

Mientras MS tenga claro cuáles son las variables reservadas, no creo que haya un problema importante.Sin embargo, quizás podrían mejorar el compilador para generar advertencias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top