Tôi đang cố gắng để có được "sử dụng nghiêm ngặt"; chỉ thị để làm việc, và có một chút rắc rối. Trong tập tin sau đây FireFox 9 sẽ (chính xác) phát hiện rằng someVar chưa được khai báo trên dòng 3, nhưng không phát hiện ra rằng theVar chưa được khai báo trên dòng 19. Tôi stumped là tại sao đây là trường hợp.Tại sao không "sử dụng nghiêm ngặt" (JavaScript) phát hiện một biến không khai báo?
"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!");
});
});
Là một sidenote, sử dụng một trình soạn thảo có khả năng phân tích mã của bạn thông qua một linter sẽ bắt gặp những lỗi này trong thời gian chỉnh sửa. Cá nhân, tôi sử dụng Sublime Text 2 kết hợp với SublimeLinter làm nổi bật các lỗi được báo cáo bởi JSHint http://www.jshint.com/ –
Nuts! Tôi thề tôi thực sự đã thử điều này nhiều lần và không nhận được bất kỳ lỗi nào từ Firebug ở tất cả mọi thứ. Tôi đã quay lại và thử lại lần nữa và giờ tôi đã báo lỗi trong bảng điều khiển Firebug (nhưng chỉ khi được nhấp). JSLint sẽ báo cáo nó trong một lần truy cập (nghĩa là, mà không cần đợi phương thức được gọi). Cảm ơn! – MikeTheTall
Bạn có thể chỉ ra sự khác biệt giữa thời gian phân tích cú pháp và báo cáo lỗi thời gian chạy trong câu trả lời. Đó là khái niệm then chốt khi chơi ở đây. – wewals