2012-04-09 48 views
25

Tôi đã tò mò rằng những gì hiện setTimeout trở lại. Vì vậy, tôi đã làm một bài kiểm tra nhanh:Trả về setTimeout là gì?

var thing = setTimeout(function(){},1); 

Và điều làm tôi ngạc nhiên là nó đã cho tôi một số. 1351 Mỗi lần khác nhau.

Vì vậy, nó thực sự là tất cả nó trả về là một số? Vì vậy, tôi thực sự có thể làm điều này là tốt?

clearTimeout(1351); 

Rất khó hiểu ...

+0

của bộ đếm thời gian ID xử lý: http://www.w3.org/TR/Window/#timers –

Trả lời

30

Đó là một tay cầm (một định danh duy nhất). Khi bạn tạo ra một thời gian chờ, thời gian chạy JavaScript kết hợp một số nguyên "xử lý" với thời gian chờ bạn tạo ra, và nó có thể xác định rằng thời gian chờ bằng cách xử lý setTimeout() trả về. Khi bạn chạy clearTimeout(), nó sẽ biết bạn đang nói về khoảng thời gian chờ nào bằng cách nhìn vào tay cầm độc đáo mà bạn chuyền vào.

9

Bạn có thể nghĩ nó là một bộ đếm thời gian để bạn có thể đặt lại clearTimeout(timerID)

8

nó có thể là một Object, tôi thử nghiệm nó với node.js:

var sto = setTimeout(
    function(){console.log('ping');}, 
    1000 
); 

console.log(sto); 

Đầu ra là:

{ _idleTimeout: 1000, 
    _idlePrev: 
    { '0': [Function: listOnTimeout], 
    _idleNext: [Circular], 
    _idlePrev: [Circular], 
    msecs: 1000 }, 
    _idleNext: 
    { '0': [Function: listOnTimeout], 
    _idleNext: [Circular], 
    _idlePrev: [Circular], 
    msecs: 1000 }, 
    _idleStart: 2413359232, 
    _onTimeout: [Function], 
    _repeat: false, 
    domain: 
    { domain: null, 
    _events: { error: [Function] }, 
    _maxListeners: undefined, 
    members: [] } } 
+1

Wow này là thú vị. –

0

đó là một ID nhiệm vụ (tôi thích nghĩ rằng đó là một task_ID hơn là một Timeout_ID gây nhầm lẫn cho tất cả mọi người).

hãy tưởng tượng bạn phải khởi chạy hàm mặc định: "f_cup_of_tea", bất kỳ cá nhân bình thường nào cũng sẽ cần sau 5 phút trên trang web của bạn. :

tea_Task_ID = window.setTimeout(f_cup_of_tea, (5*60*1000), 15, 2); 

như: chức năng f_cup_of_tea (milk_ml, đường) {....}

nhưng tiếc là, với mười thứ hai muộn, một người sử dụng psychadelic thích để có được một cái gì đó khác với toàn bộ thế giới, và chọn một bad_tequila ...

bạn phải hủy "f_cup_of_tea" ngon dự kiến ​​trong vòng năm phút ... may mắn thay javascript có suy nghĩ của loại hình này của vấn đề và bạn có thể sử dụng:

window.clearTimeout(tea_Task_ID); 

(nhưng nó chỉ woorks nếu "f_cup_of_tea" chưa được bắt đầu).

tiếp theo, bạn có thể khởi động:

tequila_Task_ID = window.setTimeout(f_bad_tequila, (5*1000), 0); // for in 5s, with zero ice... 
+0

Đối với bản thân mình, tôi nghiêm túc nghĩ rằng câu trả lời của tôi là tốt hơn nhiều so với tất cả những người khác, bởi vì nó là thú vị và giáo dục :) –

Các vấn đề liên quan