bước:Tại sao Firefox quên giá trị của biến? Giải pháp để gỡ lỗi?
Mở trang trong Firefox 29.0.1 (Windows 7 x64):
<!doctype html> <title>Test</title> <script> (function() { var x = 5, f = function() { setTimeout(f, 1000); }; f(); }()); </script>
cụ mở cho nhà phát triển (F12).
Trong Debugger, thiết lập một breakpoint trên:
setTimeout(f, 1000);
Một khi breakpoint là hit, đánh giá
x
trong giao diện điều khiển. Kết quả:undefined
Nạp lại trang. Điểm ngắt được nhấn vào lần chạy đầu tiên của
f
.Đánh giá
x
. Kết quả:5
Tiếp tục thực hiện và khi điểm ngắt được nhấn lần nữa, hãy đánh giá
x
. Cùng một kết quả:5
giả định của tôi: Nếu Firefox nhận ra trên đường chạy trốn đầu tiên của f
rằng x
là không cần thiết, sau đó nó không lưu trữ các giá trị của x
"với" f
. Vì vậy, trong các cuộc gọi tiếp theo đến f
giá trị của x
là undefined
. Thật thú vị, tôi thấy hành vi tương tự trong Chrome 35 và IE11.
Câu hỏi:Điều gì đang xảy ra? Tôi có thể định cấu hình Firefox để thực hiện x
đánh giá đúng giá trị của nó trong bước 4 (xem ở trên) không?
'x' chỉ tồn tại trong chức năng của bạn và bạn đang cố gắng truy cập nó từ ở ngoài. – Meredith
Tôi không gặp phải vấn đề này. Khi tôi bước vào nó, nó đánh giá chính xác. Fox 23.0.1 được xây dựng trong các công cụ dev. Tôi đã trải nghiệm trình gỡ lỗi không hoạt động chính xác nếu bạn tải một trang, bắt đầu trình gỡ lỗi và cố gắng gỡ lỗi từ đó. Tôi đã từng phải tải trang, tải trình sửa lỗi, làm mới trang để làm cho nó hoạt động. –
@Meredith Tôi đang truy cập 'x' từ điểm ngắt trên' setTimeout (f, 1000); ', là * bên trong * của hàm. – feklee