Ví dụ thứ hai của bạn chắc chắn sẽ không hoạt động vì i
được khai báo một lần và không phải trên mỗi lần lặp, đây chỉ là một hàm về cách hoạt động của loại vòng lặp đó.
Bạn có thể thử điều này trong một trình duyệt thông thường:
for (var i = 0, otherVar = ""; i < [1,2,3,4].length; i += 1){
console.log(otherVar)
otherVar = "If otherVar was initialized on each iteration, then you would never read me.";
}
Nó không phải là trường hợp const
hoàn toàn không được phép trong for
các vòng lặp. Chỉ cófor
điều đó sẽ sửa đổi const là.
Những điều này hợp lệ:
for(const i = 0;;){ break }
for(const i = 0; i < 10;){ break; }
Chúng không hợp lệ:
for(const i = 0;;){ ++i; break; }
for(const i = 0;;++i){ if(i > 0) break; }
Tôi không chắc tại sao Firefox lại đưa ra lỗi SyntaxError sau khi đọc thông số ES2015 (mặc dù tôi chắc chắn rằng những người thông minh ở Mozilla là đúng), có vẻ như nó phải đưa ra một ngoại lệ:
Tạo một liên kết bất biến mới nhưng chưa được khởi tạo trong Bản ghi môi trường. Giá trị chuỗi N là văn bản của tên liên kết. Nếu S là true thì việc cố gắng truy cập giá trị của ràng buộc trước khi nó được khởi tạo hoặc đặt nó sau khi nó được khởi tạo sẽ luôn ném ra một ngoại lệ, bất kể cài đặt chế độ nghiêm ngặt của các hoạt động tham chiếu đến ràng buộc đó. S là một tham số tùy chọn được mặc định là false.