var
mình không thực hiện bài tập. Nó chỉ cờ khi bạn sử dụng tên biến trong phạm vi mà trong đó các var
xảy ra, bạn đang nói về một biến địa phương và không toàn cầu (mặc định gây tranh cãi). Các var
được phát hiện khi chức năng được phân tách và giữ suốt phạm vi đó, vì vậy mà bạn đặt nó là không thích hợp:
var a= 0;
function foo() {
a= 1;
return a;
var a;
}
var b= foo();
alert('global a='+a+', local a='+b);
Kết quả trong global a= 0, local a= 1
: mặc dù tuyên bố var
không bao giờ đạt được trong quá trình thực hiện foo()
, vẫn còn hiệu quả khi thực hiện a
biến cục bộ.
Vì vậy, khai báo var x
lần thứ hai trong cùng một phạm vi là hoàn toàn dư thừa. Tuy nhiên, đôi khi bạn vẫn có thể làm điều đó, thường là khi bạn sử dụng lại tên biến cục bộ cho lần sử dụng độc lập thứ hai trong cùng một hàm. Phổ biến nhất:
for (var i= 0; i<onething.length; i++) {
...do some trivial loop...
}
for (var i= 0; i<anotherthing.length; i++) {
...do another trivial loop...
}
Trong khi bạn chắc chắn có thể bỏ qua thứ hai var
, và các công cụ như jslint
sẽ yêu cầu bạn làm như vậy, nó có thể không thực sự là một ý tưởng tốt.
Hãy tưởng tượng bạn sau đó thay đổi hoặc xóa vòng lặp đầu tiên để nó không còn tuyên bố i
thành var
nữa. Bây giờ vòng lặp thứ hai còn lại đột nhiên thay đổi ý nghĩa từ một biến cục bộ thành một biến toàn cầu. Nếu bạn không chú ý khi cập nhật vòng lặp đầu tiên vòng lặp thứ hai có sự phụ thuộc ẩn vào nó (và bạn có thể không nhận thấy rõ rằng làm thế nào mà mắt tách hình mẫu for(...=0 ; ...<...; ...++)
thành “oh, đó chỉ là một trình lặp chuẩn”), bạn đã có một vấn đề phức tạp và khó chịu để gỡ lỗi.
Nội dung câu hỏi của bạn là về một ví dụ cụ thể, đã được trả lời đầy đủ dưới đây. Tuy nhiên, tôi thấy rằng [câu trả lời này] (http://stackoverflow.com/a/12889928/983430) cho một câu hỏi tương tự trả lời cho trường hợp chung (khi nào/tại sao lại sử dụng một biến JavaScript được sử dụng?) Được hỏi trong tiêu đề của câu hỏi của bạn thực sự tốt. –