setTimeout 为什么不会堆栈溢出?

lovetysx lovetysx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
假如代码如下

function callback(f) {
f();
}

function foo() {
foo(); //执行1000次左右会发生堆栈溢出的错误,
//setTimeout(foo, 0); //永远不会堆栈溢出
}
foo()

这是什么原理?
请问假如我自己把callback函数也定义成setTimeout这样的,应该怎么写?
...全文

相关推荐

8个有意思的JavaScript面试题

JavaScript 是一种有趣的语言,我们都喜欢它,因为它的性质。浏览器是JavaScript的主要运行的地方,两者在我们的服务中协同工作。JS有一些概念,人们往往会对它掉以轻心,有时可能会忽略不计。原型、闭包和事件循环等概念仍然是大多数JS开发人员绕道而行的晦涩领域之一。正如我们所知,无知是一件危险的事情,它可能会导致错误。 接下来,来看看几个问题,你也可以试试想想,然后作答。 问题1:浏览器控制台上会打印什么? var a = 10; function foo() { console.log(a); // ?? var a = 20; } foo(); 问题2:如果我们使用 let

weixin_38674763

JavaScript调用堆栈及setTimeout使用方法深入剖析

Javascript中会经常用到setTimeout来推迟一个函数的执行并且会在执行到这句话后延迟1秒钟来弹出alert窗口,接下来将介绍一下JavaScript调用堆栈和setTimeout用法,感兴趣的你可不要错过了哈

weixin_38572115

微信小程序—setTimeOut定时器的问题及解决

主要介绍了微信小程序—setTimeOut定时器的问题及解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38655011

node-superstack:node.js 的长堆栈跟踪

超级堆栈 node.js 在 async/io 边界上的长堆栈跟踪 安装 npm install superstack 用 只需要在您的项目中使用superstack 。 理想情况下,第一个要求之一(看看它是如何工作的) var superstack = require ( 'superstack' ) ; function f ( ) { throw new Error ( 'foo' ) ; } setTimeout ( f , Math . random ( ) ) ; setTimeout ( f , Math . random ( ) ) ; 您的堆栈跟踪现在将超出异步调用边界。 从上面的代码。 超级堆栈之前 Error: foo at f [as _onTimeout] (.../node-superstack/foobar.js:2:11)

鸡糟的黄医桑

JavaScript 对引擎、运行时、调用堆栈的概述理解

随着JavaScript越来越流行,越来越多的团队广泛的把JavaScript应用到前端、后台、hybrid 应用、嵌入式等等领域。 这篇文章旨在深入挖掘JavaScript,以及向大家解释JavaScript是如何工作的。我们通过了解它的底层构建以及它是怎么发挥作用的,可以帮助我们写出更好的代码与应用。据 GitHut 统计显示,JavaScript 长期占据GitHub中 Active Repositories 和 Total Pushes 的榜首,并且在其他的类别中也不会落后太多。 如果一个项目越来越依赖 JavaScript,这就意味着开发人员必须利用这些语言和生态系统提供更深层次的

weixin_38691006
评论 11
收藏 已收藏
分享
返回顶部
lovetysx
JavaScript 87,983 成员 224,681 内容