try catch捕捉异常
ry cath里面定义function,执行function在try catch面,可以捕捉到
try{
function d(){a.b;}
d();
}catch(e){
console.log("error",e);
}
error ReferenceError: a is not defined
at d (<anonymous>:2:15)
at <anonymous>:3:1
try cath里面定义function,执行function在外面,无法捕捉到
try{
function d(){a.b;}
}catch(e){
console.log("error",e);
}
d();
输出:
VM608:2 Uncaught ReferenceError: a is not defined
at d (<anonymous>:2:15)
at <anonymous>:7:1
trycatch里面有setTimeout,无法捕捉到。
try{
setTimeout(function(){
console.log(a.b);
}, 3000)
}
catch(e){
console.log('error..');
}
输出:
VM612:5 Uncaught ReferenceError: a is not defined
at <anonymous>:5:22
try { setTimeout(function () { throw new Error(5) }, 100) } catch (e) { console.log(“error”,e) }
如上也捕捉不到异常,异步错误捕捉不到。比如setTimeiut,promise里面的异步报错,再外层的trycatch捕捉不到。
new Promise(function (resolve, reject) { throw new Error('my error') }).then(v=>{ console.log(v); },e=>{ console.log(e); });
这个也能捕捉到异常,这个是promise里面捕捉到了异常,然后回调catch,在promise里面还是同步try catch做的。
try catch能否捕捉到,看执行代码的上下文是否在try catch的范围内
比如执行function,function的this指向哪里,调用方是否被try catch才是关键,
另外语法错误和异步错误,trycatch捕捉不到