2016-01-30 74 views
0

看到這些2例爲什麼setTimeout放在函數外不會被觸發?

<head> 
<script language="JavaScript" type="text/javascript"> 
var mTimer=setTimeout(foo();1000); 
</script> 
</head> 

其他例子

<head> 
<script language="JavaScript" type="text/javascript"> 
var mTimer; 
function test(){ mTimer=setTimeout(foo();1000);} 
</script> 
</head> 

在例1中,當我們加載頁面的mTimer=setTimeout(foo();1000);將無法​​運行

在例2中,當我們點擊按鈕觸發test();然後此時mTimer=setTimeout(foo();1000);開始運行。

爲什麼setTimeout放在一個函數外不會在加載頁面時觸發?

+0

嘗試'的setTimeout(富,1000)',而不是'的setTimeout(富(); 1000)' – nmnsud

回答

1

setTimeout絕對在函數之外工作。

除非foo是返回另一個函數的函數,更可能你想

// do this 
var mTimer = setTimeout(foo, 1000); 

而不是

// don't do this 
var mTimer = setTimeout(foo(), 1000); 

所不同的是在第一個代碼,功能foo的引用傳遞到setTimeout其中在第二個代碼中,返回值foo()傳遞給setTimeout


運行該代碼片段,看看它的工作

function foo() { 
 
    alert("it works!"); 
 
} 
 

 
setTimeout(foo, 1000);

+0

我改變你建議,但它不起作用。你能否提供其他解決方案? setInterval可以嗎? – Tom

+0

我在帖子底部提供了一個完整的代碼示例。 'setInterval'與'setTimeout'具有不同的行爲 – naomik

+0

我把你的代碼放到我的jsp文件中,它只運行一次 – Tom

相關問題