for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
không đúng khi nói ở trên tạo biến toàn cục i
. Tôi tin rằng bạn nên luôn luôn sử dụng var
để khai báo các biến (trừ khi bạn đang cố ý muốn một 'tài sản' thay vì 'biến' -những gì là không chắc chắn trong 99,99% các kịch bản mã JS ...)
Bỏ qua var
khi gán giá trị ban đầu là i
không tạo ra biến cục bộ hoặc thậm chí toàn cục, nó tạo ra một thuộc tính i
cho đối tượng toàn cầu (có thể có vẻ/hoạt động chủ yếu giống như biến toàn cầu - nhưng chúng có một số khác biệt tinh tế).
tốt hơn sẽ là:
var i;
for(i=0; i<arr.length; i++) {
var j=0;
// ...
}
nay là vòng lặp được sử dụng một biến toàn cầu i
(hoặc chức năng biến địa phương i
, nếu mã này xuất hiện trong một hàm)
xem chi tiết về vấn đề này tại what is function of the var keyword và variables vs. properties in Javascript
- lưu ý, một chút khó hiểu là bạn có thể khai báo lại biến, ví dụ như trong vòng lặp thứ hai
for(var i=0; i<9; i++){
document.write('i = ' + i + '<br>');
}
for(var i=0; i<9; i++){
document.write('i = ' + i + '<br>');
}
điều này có vẻ hợp lệ (không có lỗi khi tôi kiểm tra). Có vẻ như bạn CÓ THỂ tái khai báo biến trong JavaScript - nhưng có lẽ không phải là ý tưởng hay, trừ khi có trường hợp đặc biệt - hãy xem câu hỏi liên quan này đề cập đến cách [Google Analytics sử dụng 'redeclaration' an toàn '') Redeclaring a javascript variable)
có một số cuộc thảo luận về tái tuyên bố biến trong JS (và cũng có thể biến vòng lặp như i
) trong liên quan SO câu hỏi này: declare variables inside or outside the loop
có trường hợp một JavaScript pattern for single declaration of variables
Nguồn
2014-10-21 15:59:29
Cảm ơn bạn đã nhập :) – BlackBox
đây là khả năng tái tạo tuyệt vời nhưng phá vỡ những gì mặt trời đang cố gắng thiết lập. – simonarame
@simonarame nhưng sau đó [Java và JavaScript không giống nhau] (https://stackoverflow.com/a/245068/3978545) nên không liên quan ... – Wolfie