2010-03-23 8 views
14

Ejecutando los siguientes resultados de código simple en una "Infracción estricta". mensaje de error. He estado tratando de encontrar documentación sobre por qué y cómo solucionarlo. Cualquier comentario será muy apreciado.jslint: ¿por qué este código da como resultado un mensaje de error de "Estricta violación"?

El error:

Error: 

Problem at line 6 character 4: Strict violation. 

} (this)); 

El código de ejemplo:

/*jslint browser: true, onevar: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, strict: true, newcap: true, immed: true */ 

"use strict"; 

(function (window) { 
} (this)); 

Regards, Egil.

+1

¿Pertinencia? http://twitter.com/kangax/status/8980322050 – kennytm

+0

KennyTM, podría ser, ¿alguien puede confirmar esto? –

Respuesta

8

que tenía un vistazo al código fuente de JSLint, que dice:

function reservevar(s, v) { 
    return reserve(s, function() { 
     if (this.id === 'this' || this.id === 'arguments' || 
       this.id === 'eval') { 
      if (strict_mode && funct['(global)']) { 
       warning("Strict violation.", this); 
      } else if (option.safe) { 
       warning("ADsafe violation.", this); 
      } 
     } 
     return this; 
    }); 
} 

supongo que JSLint realmente se queja de que está utilizando this en un contexto global.

17

Para ampliar la respuesta de Roland Illig:

En el modo no estricto, this está vinculado al ámbito global cuando no está vinculada a ninguna otra cosa. En modo estricto, no está definido. Eso hace que sea un error usarlo fuera de un método.

+1

'this' todavía se refiere al alcance global si se usa en un contexto global, pero no en métodos bajo el modo estricto. –

Cuestiones relacionadas