未用try/catch时JavaScript异常由谁捕获?兼问调用栈相关问题
JavaScript异常处理相关问题解答
1. 单行throw new Error('someError')的异常被谁捕获?
当脚本只有这一行代码时,是宿主环境(浏览器/Node.js)的顶层错误处理机制捕获了这个异常。
如果是在浏览器里,浏览器自带全局错误监听逻辑,会触发window.onerror事件,然后在控制台打印错误信息;如果是Node.js环境,会触发process.on('uncaughtException')事件,默认会输出错误并终止进程。
简单说,当你自己没写任何try/catch块,也没有上层调用栈的捕获逻辑时,宿主环境的顶层兜底处理就会接手,把错误信息展示出来,这就是你能看到异常提示的原因。
2. JavaScript是否像C语言那样有main()函数被推入调用栈?
JavaScript没有C语言那种显式的main()函数,但存在隐式的顶层执行上下文,作用类似C的main栈帧。
当浏览器加载执行脚本文件,或者Node.js运行一个模块时,JS引擎会创建全局执行上下文(浏览器对应window对象,Node.js对应globalThis),这个上下文会被推入调用栈最底层。所有不在函数里的顶层代码,都是在这个全局执行上下文中运行的。
另外ES6模块里,每个模块会有自己的模块执行上下文,相当于模块级别的"入口环境",功能也类似main函数的角色。
内容的提问来源于stack exchange,提问作者octanium
相关产品推荐
相关产品推荐

