Điều đầu tiên là thực hiện chức năng này (nhờ vào ()
ở cuối mã bạn đã đăng):
function() {
// SET TIMER
var timer = 0;
// RETURN SET TIMEOUT FUNCTION
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
}
và lưu kết quả vào delay
. Khi được thực hiện, hàm này tạo ra một sự đóng với biến cục bộ timer
làm cho máy chủ bị ngắt như một bộ đếm cục bộ. Các chức năng sau đó trả về chức năng bên trong:
function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
}
Vì nó là trong việc đóng cửa, chức năng bên này có quyền truy cập vào biến timer
. Không có mã bên ngoài nào khác có thể truy cập timer
. Phương pháp này được sử dụng để cho phép nhiều bộ hẹn giờ chạy cùng một lúc mà không phải lo lắng về nhiều biến số timer
.
Hãy tưởng tượng nó như thế này: delay
hiện chứa một hàm (function(callback, ms) {...
) có quyền truy cập vào biến cục bộ, timer
. Biến số timer
không hiển thị như bất kỳ mã bên ngoài nào có liên quan. Chỉ chức năng mà delay
chứa mới có thể truy cập.
Sau đó, bạn gọi hàm bên trong đó bằng cách gọi delay(callback, timeout)
.
Nguồn
2012-04-08 22:39:34
Tôi đề nghị bạn hỏi rằng trên http://codereview.stackexchange.com/ – Gerep
Hãy xem ['clearTimeout'] (https://developer.mozilla.org/en/DOM/window.clearTimeout) và [ 'setTimeout'] (https://developer.mozilla.org/en/DOM/window.setTimeout). –
Bạn cũng có thể muốn xem định nghĩa chức năng ẩn danh. Đây là [link] (http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work). – DiamRem