Próbuję uzyskać "ścisłe użycie"; dyrektywę do pracy i trochę kłopotów. W poniższym pliku FireFox 9 (poprawnie) wykryje, że someVar nie został zadeklarowany na linii 3, ale nie wykrył, że parametr Var nie został zadeklarowany w linii 19. Nie jestem pewien, dlaczego tak się stało.Dlaczego "używać ścisłego" (JavaScript) nie wykryje niezadeklarowanej zmiennej?
"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!");
});
});
Jako senuote, za pomocą edytora, który jest w stanie analizować kod za pomocą linter będzie złapać te błędy czas edycji. Osobiście używam Sublime Text 2, który w połączeniu z SublimeLinter podkreśla błędy zgłoszone przez JSHint http://www.jshint.com/ –
Orzechy! Przysięgam, że wypróbowałem to kilka razy i wcale nie otrzymałem żadnych błędów od Firebuga. Wróciłem i wypróbowałem to jeszcze raz i teraz robię błąd zgłaszany w konsoli Firebug (ale tylko po kliknięciu). JSLint zgłasza to w jednym przebiegu (tj. Bez oczekiwania na wywołanie metody). Dzięki! – MikeTheTall
Możesz wskazać różnicę między analizą czasu przetwarzania i raportowaniem błędów wykonania w odpowiedzi. To jest tutaj kluczowa koncepcja. – wewals