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!");
});
});
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/ –
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
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