Tôi là nhà phát triển C# và được sử dụng cho cách đóng cửa hoạt động trong C#. Hiện nay tôi phải làm việc với chức năng javascript ẩn danh và gặp sự cố với đoạn mã sau:Truy cập biến số nguyên được sao chép trong phương thức ẩn danh javascript
function ClosureTest() {
var funcArray = new Array();
var i = 0;
while (i < 2) {
var contextCopy = i;
funcArray[i] = function() { alert(contextCopy); return false; };
i++;
}
funcArray[0]();
funcArray[1]();
}
tôi hy vọng các funcArray()
cuộc gọi đầu tiên để nói 0
và giây để nói 1
. Tuy nhiên, cả hai đều nói 1
. Làm thế nào là có thể?
Bằng cách viết var contextCopy = i
Tôi đảm bảo rằng tôi tạo bản sao của i
có thể thay đổi. Sau đó, trong mỗi lần lặp lại, tôi tạo một con trỏ hàm hoàn toàn mới. Mỗi chức năng đề cập đến bản sao riêng của nó là i
, là contextCopy
. Tuy nhiên, cả hai hàm đã tạo vì một lý do nào đó đều tham chiếu đến cùng một số contextCopy
-variable.
Cách này hoạt động trong javascript?
có lý do nào bạn không sử dụng vòng lặp 'for' không? – zzzzBov
không có không ;-) – TwinHabit