js中setTimeout导致try catch无法捕获异常

碰到一个有趣的小问题,setTimeout里的代码发生了异常,try catch却没有捕获到。

function test(){
  	try {
		setTimeout(function(){
			throw 'error';
		}, 1);
	} catch (e) {
		console.log("try catch里捕获的异常" + e);
	}
}

运行结果如下:
在这里插入图片描述
那么如何捕获这里面的异常呢?总不可能在每个延时函数里再增加异常捕获。
最终找到了:window.onerror

window.onerror = function(message, source, lineno, colno, error{ 
	console.log("window.onerror里捕获的异常" + message);
	return true;
};

更详细的用法,请参考以下文章。
前端代码异常监控方案window.onerror
window.onerror的总结
前端代码异常监控之 - window.onerror

你可能感兴趣的:(前端,javascript)