2012-08-06 30 views
5

Hãy xem xét ví dụ sau:JavaScript setTimeout() sẽ không đợi để thực thi?

<script type="text/javascript"> 
    function alertBox(){ 
     alert('Hello World!'); 
    } 
    function doSomething(){ 
     setInterval(alertBox(), 5000); //This is for generic purposes only 
    }; 
    function myFunction(){ 
     setTimeout(doSomething(),3000); 
    }; 

    myFunction(); 
</script> 

nó là gì mà nguyên nhân này để thực hiện NGAY, thay vì chờ đợi 3 giây được thiết lập, cũng như chỉ thực hiện các cảnh báo ONCE, chứ không phải so với khoảng thời gian 5 giây đã lên lịch?

Cảm ơn bạn đã trợ giúp bạn có thể cung cấp!

Mason

+4

Vâng, ** callback được gọi ngay lập tức ** (và kết quả * * được truyền cho 'setTimeout') .. vượt qua chức năng - thay vào đó. –

+1

Đây có lẽ là câu hỏi javascript được hỏi nhiều nhất trên SO. – jfriend00

+0

@ jfriend00 Tôi nghĩ rằng các biến đóng trong các vòng có thể buộc nó .. ;-) –

Trả lời

13
alertBox() 

Không này trông giống như một cuộc gọi chức năng ngay lập tức?

Hãy thử qua chức năng (mà không thực hiện nó) thay vì:

setInterval(alertBox, 5000); 
11

của nó bởi vì bạn đang thực hiện các chức năng, không phải thông qua một đối tượng hàm.

function myFunction(){ 
    setTimeout(doSomething, 3000); // no() on the function 
}; 
Các vấn đề liên quan