在同一个函数中调用`Function` vs`Function()`

Rus*_*ust 0 javascript jquery

我正在编写一个长轮询脚本并遇到一个too much recursion挂起浏览器的错误.我的目标是每1000ms使用相同的功能setTimeout().是的,我可以使用,setInterval()但它将是一个长轮询脚本,并将等待服务器响应.

我通过删除()我在同一个函数中调用的函数来解决这个问题.

我的脚本看起来像:

function messagePolling(){
    console.log("polled")
    setTimeout(messagePolling(),1000) // <--- removing `()` from the function works as intended 
} 

messagePolling();
Run Code Online (Sandbox Code Playgroud)

这背后的逻辑是什么?messagePolling毕竟不是它的功能.

Flo*_*rie 5

你是绝对正确的 - messagePolling是一个功能.然而,messagePolling()不是一个函数.您可以在控制台中看到它:

// assume messagePolling is a function that doesn't return anything
messagePolling() // -> undefined
Run Code Online (Sandbox Code Playgroud)

所以,当你这样做时:

setTimeout(messagePolling(), 1000)
Run Code Online (Sandbox Code Playgroud)

你真的这样做:

setTimeout(undefined, 1000)
Run Code Online (Sandbox Code Playgroud)

但是当你这样做时:

setTimeout(messagePolling, 1000)
Run Code Online (Sandbox Code Playgroud)

实际上是将函数传递给了setTimeout.然后setTimeout将知道运行你传递的功能messagePolling- 稍后.如果它决定稍后调用undefined(结果messagePolling()),它将无法工作,对吧?