2011-12-25 25 views
7

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

}); 

Trả lời

7

Bạn cần gọi trình xử lý trước khi phát sinh lỗi. Nói cách khác, hãy nhấp vào số #btnToClick.

Ví dụ: f2: http://jsfiddle.net/X3TQb/

+0

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/ –

+0

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

+1

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

1

Javascript khá thú vị khi nói đến phạm vi biến. Nếu bạn chạy mã khác trước khi chạy mã này, bạn có thể có các biến được khai báo và sẽ không có bất kỳ lỗi nào và vì lý do đó, khó có thể ném lỗi cho các biến bị thiếu trừ khi chạy.

Các vấn đề liên quan