Nó phải làm với phạm vi JavaScript. Bạn có thể nhận được xung quanh nó một cách dễ dàng bằng cách giới thiệu phạm vi khác bằng cách thêm một chức năng và có chức năng gọi bản thân và vượt qua trong tôi:
for (var i = 1; i <= some_number; i++) {
(function(j) {
$("#some_button" + j).click(function() {
alert(j);
});
})(i);
}
này tạo ra một kết thúc - khi các chức năng bên trong có quyền truy cập vào một phạm vi không còn tồn tại khi hàm được gọi. Xem this article trên MDC để biết thêm thông tin.
CHỈNH SỬA: RE: Các chức năng tự gọi: Chức năng tự gọi là chức năng tự ẩn danh. Bạn không khởi tạo nó cũng như bạn gán nó cho một biến. Nó có dạng như sau (chú ý dấu ngoặc mở):
(function(args) {
// function body that might modify args
})(args_to_pass_in);
quan này cho câu hỏi, các cơ quan chức năng ẩn danh sẽ là:
$("#some_button" + j).click(function() {
alert(j);
});
Kết hợp này lại với nhau, chúng tôi nhận được câu trả lời trong khối mã đầu tiên. Chức năng tự gọi ẩn danh đang chờ một đối số có tên là j
. Tìm kiếm bất kỳ phần tử nào có id là some_button
có giá trị nguyên là j
ở cuối (ví dụ: some_button1, some_button10). Bất kỳ khi nào một trong các thành phần này được nhấp vào, nó sẽ cảnh báo giá trị của j
. Dòng thứ hai đến cuối cùng của giải pháp đi qua giá trị i
, là bộ đếm vòng lặp mà chức năng tự gọi ẩn danh được gọi. Thực hiện theo cách khác, nó có thể trông giống như sau:
var innerFunction = function(j) {
$("#some_button" + j).click(function() {
alert(j);
});
};
for (var i = 1; i <= some_number; i++) {
innerFunction(i);
}
Nguồn
2010-06-30 14:07:33
Đây là vấn đề rất phổ biến vì hầu hết các câu trả lời đều đề xuất. Ngoài ra, tất cả các câu hỏi được gắn thẻ 'javascript',' closures, 'và' loops' sẽ trỏ đến vấn đề và giải pháp chính xác này - [javascript + closures + loops] (http://stackoverflow.com/questions/tagged/javascript+closures+ vòng lặp), bao gồm cả cái này ngay bây giờ :) – Anurag
chúng ta cần một cách để SO có một cửa sổ pop-up lớn nói rằng "NÀY ĐÃ ĐƯỢC TRẢ LỜI TRƯỚC", với các liên kết đến câu hỏi đúng. Tôi đã nhìn thấy ít nhất 3 phiên bản javascript và 2 phiên bản python hỏi câu hỏi này. – Claudiu
@Claudiu: Thật không may, rất khó cho những người mới đến JavaScript/Python tìm kiếm các loại vấn đề này. –