我正在編寫一個長輪詢腳本並遇到掛起瀏覽器的too much recursion
錯誤。我的目標是使用setTimeout()
每1000ms調用一次相同的函數。是的,我可以使用setInterval()
,但它將是一個長輪詢腳本,並將等待服務器響應。在同一函數中調用`Function`和`Function()`
我通過從我在同一函數中調用的函數中刪除()
來解決此問題。
我的腳本是這樣的:
function messagePolling(){
console.log("polled")
setTimeout(messagePolling(),1000) // <--- removing `()` from the function works as intended
}
messagePolling();
這背後有什麼邏輯? messagePolling
畢竟不是它的功能。
'messagePolling'是對函數的引用。 'messagePolling()'**調用**函數。你應該知道,因爲你在你的代碼片段的最後一行有'messagePolling();')並且我確定你已經將函數的返回值傳遞給了其他函數,比如'foo(bar()) '。這將調用'bar'並將返回值傳遞給'foo'。這就是函數調用在JavaScript中的作用。 –
參見例如[這個問題](http://stackoverflow.com/questions/1190642/how-can-i-pass-a-parameter-to-a-settimeout-callback)或[許多其他重複](https:// www。 google.de/webhp#q=javascript+settimeout+pass+function+site:stackoverflow.com) – ASDFGerte