Я пытаюсь получить «использование строгого»; директиву на работу и с небольшим количеством неприятностей. В следующем файле FireFox 9 (правильно) обнаружит, что someVar не был объявлен в строке 3, но не может обнаружить, что Var не был объявлен в строке 19. Я в тупике, почему это так.Почему «строго говоря» (JavaScript) не обнаруживает необъявленную переменную?
"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!");
});
});
В качестве побочного элемента, используя редактор, который способен анализировать ваш код через linter, будет ловить эти ошибки время редактирования. Лично я использую Sublime Text 2, который в сочетании с SublimeLinter выделяет ошибки, о которых сообщает JSHint http://www.jshint.com/ –
Орехи! Клянусь, я действительно пробовал это несколько раз и не получал никаких ошибок от Firebug вообще. Я вернулся и попробовал снова, и теперь я сообщаю об ошибке в консоли Firebug (но только при нажатии). JSLint сообщает об этом за один проход (т. Е. Не дожидаясь вызова метода). Спасибо! – MikeTheTall
В ответе вы можете указать разницу между временем синтаксического анализа и временем выполнения. Вот ключевая концепция здесь. – wewals