Debe crear una variable llamada _Es conflicto con esto?

votos
2

Este es un ejemplo muy artificial, pero supongamos que creamos una variable _thisen 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 espera cuando llamamos a la changeNamefunción debido a que la parte correspondiente del código compilado es el siguiente:

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

Esto es malo Javascript: tenemos dos vardeclaraciones sobrescriban entre sí. El _thiscreado por el compilador se sobrescribe por mi _this.

Por lo que yo puedo ver, este comportamiento no se especifica en la especificación mecanografiado.

¿Por qué deberían entrar en conflicto? No se puede detectar si el compilador He creado una variable llamada _thisy el nombre del generada automáticamente uno algo más, como _this2para mantener mis variables y los generados por el compilador del pisoteo el uno del otro?

Publicado el 03/10/2012 a las 15:08
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
7

El compilador creará automáticamente _thiscomo referencia para thisfacilitar el cierre que se creará mediante el uso de la sintaxis lambda. Estoy bastante seguro de que leí esto en la especificación mecanografiado en alguna parte, pero estoy de acuerdo que el compilador debe emitir un error en este caso.

No me gusta la idea de que el compilador variando la forma en que emite Javascript ya que esto entra en conflicto con el objetivo declarado de generar "idiomática" (y por lo tanto predecible) javascript.

Respondida el 03/10/2012 a las 15:27
fuente por usuario

votos
0

¿No es lo que llamarían una variable reservada? Supongo que no tendría declarar una variable llamada "esto" o "documento" tampoco.

Mientras la EM es clara en cuanto a lo que las variables son reservadas, no creo que hay un problema importante. Ellos tal vez podrían mejorar el compilador a las advertencias de salida embargo.

Respondida el 03/10/2012 a las 15:27
fuente por usuario

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