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執(zhí)行完了其中的代碼之后其并沒有彈棧 仍然保留了其上下文,而定時器在timer模塊中執(zhí)行完畢之后,其綁定的回調函數(shù)被放入了任務隊列,接著又被js執(zhí)行棧取出,又放入了try的作用域內(因為js函數(shù)作用域的關系,內部變量不能被外部訪問的關系,此時能拿到b的值就表示回調函數(shù)的執(zhí)行作用域在try內部 ),那么此時為什么catch并由沒有捕獲在 try內拋出的異常?
關于node異步回調異常捕獲過程產生的疑惑
繁星淼淼
2018-12-19 09:14:37