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内抛出的异常?
慕田峪9158850
相关分类