【问题标题】:Does Self-Invoke JavaScript function will causes stack overflow exception自调用 JavaScript 函数是否会导致堆栈溢出异常
【发布时间】:2018-06-10 19:50:52
【问题描述】:
这里我有一个在setTimeout 回调函数中调用自身的函数:
function myFunc(){
// ... I'm doing my jobs here...
setTimeout(function(){
myFunc() //self invoke
},1)
}
myFunc(); // start point
这段代码最终会不会发生栈溢出异常?
提前致谢。
【问题讨论】:
标签:
javascript
function
settimeout
stack-overflow
【解决方案1】:
没有。通过setTimeout 排队的函数仅在主线程(或当前正在进行的任何线程)完成后运行 - 没有可能导致您担心的溢出的嵌套调用/嵌套环境。如果你运行这个sn-p,你永远不会遇到错误,例如:
function myFunc(i) {
if (i % 1000 === 0) console.log(i);
setTimeout(function() {
myFunc(++i)
})
}
myFunc(0);
对于调用通过 .then 递归调用自身的 Promise 的函数也是如此 - 它非常安全。