2011-12-25 10 views
7

Estoy tratando de obtener el "uso estricto"; directiva para trabajar, y tener un poco de problemas. En el siguiente archivo FireFox 9 detectará (correctamente) que someVar no ha sido declarado en la línea 3, pero falla al detectar que elVar no ha sido declarado en la línea 19. No estoy seguro de por qué este sería el caso.¿Por qué "usar estricto" (JavaScript) no detecta una variable no declarada?

"use strict"; // this will cause the browser to check for errors more aggresively 

someVar = 10; // this DOES get caught // LINE 3 

// debugger; // this will cause FireBug to open at the bottom of the page/window 
     // it will also cause the debugger to stop at this line 

    // Yep, using jQuery & anonymous functions 
$(document).ready(function(){ 
    alert("document is done loading, but not (necessarily) the images!"); 

    $("#btnToClick").click(function() { 

     alert("About to stop"); 
     var aVariable = 1; 
     debugger; // stop here! 
     alert("post stop " + aVariable); 

     // this lacks a "var" declaration: 
     theVar = 10; // LINE 19 // this is NOT getting caught 

     // needs a closing " 
     // alert("hi); 
     console.log("Program is printing information to help the developer debug a problem!"); 
    }); 

}); 

Respuesta

7

Debe invocar el controlador antes de que se produzca el error. En otras palabras, haga clic en #btnToClick.

Ejemplo violín: http://jsfiddle.net/X3TQb/

+0

Como nota al margen, usar un editor que sea capaz de analizar su código a través de un linter captará estos errores de tiempo de edición. Personalmente, uso Sublime Text 2, que combinado con SublimeLinter destaca los errores informados por JSHint http://www.jshint.com/ –

+0

Nuts! Juro que en realidad probé esto varias veces y no obtuve ningún error de Firebug en absoluto. Volví y lo intenté de nuevo y ahora lo hago, el error se informa en la consola Firebug (pero solo cuando se hace clic). JSLint lo informa en una sola pasada (es decir, sin esperar a que se invoque el método). Gracias! – MikeTheTall

+1

Puede señalar la diferencia entre el tiempo de análisis y el informe de errores de tiempo de ejecución en la respuesta. Ese es el concepto clave en juego aquí. – wewals

1

, JavaScript es un poco divertido cuando se trata de alcance variable. Si tuviera que ejecutar un código diferente antes de ejecutar este código, podría declarar las variables y no habría ningún error, y por esa razón es difícil arrojar errores para las variables faltantes, excepto en el tiempo de ejecución.

Cuestiones relacionadas