为了账号安全,请及时绑定邮箱和手机立即绑定

关于node异步回调异常捕获过程产生的疑惑

关于node异步回调异常捕获过程产生的疑惑

繁星淼淼 2018-12-19 09:14:37
try{    var b = 7 ;     setTimeout(function(){console.log(b);throw new Error('异步')},2000) }catch(e){    console.log(1)    console.log(e.message) }控制台打印结果 为7;Uncaught Error: 异步    at <anonymous>:3:48打印出了7就表示 在try执行完了其中的代码之后其并没有弹栈 仍然保留了其上下文,而定时器在timer模块中执行完毕之后,其绑定的回调函数被放入了任务队列,接着又被js执行栈取出,又放入了try的作用域内(因为js函数作用域的关系,内部变量不能被外部访问的关系,此时能拿到b的值就表示回调函数的执行作用域在try内部 ),那么此时为什么catch并由没有捕获在 try内抛出的异常?
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

try{    var b = 7 ;
}catch(e){    console.log(1)    console.log(e.message)
}console.log(b);

其实只有catch分句才会创造出块作用域,try你把它理解成一种显式声明的错误探测机制就好。所以后边这段语句其实已经脱离了try的探测范围、而在异步回调里等着了,所以自然没法触发到catch


查看完整回答
反对 回复 2018-12-19
  • 1 回答
  • 0 关注
  • 470 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信