请教,为什么这里throw触发了2个实例的?
function class1(name){
this.name = name;
var _this = this;
process.on('uncaughtException', function (e) {
_this.err(e);
});
}
class1.prototype.func1 = function(){
console.log(this.name);
if(this.name=='aaa')
throw 'error';
};
class1.prototype.err = function(e){
console.log(this.name + e);
};
var c1 = new class1('aaa');
var c2 = new class1('bbb');
c1.func1();
c2.func1();
输出结果 aaa aaaerror bbberror
为什么c2实例也触发了?应该怎么写才会是只触发c1的?
3 回复
你在c1.func1()
和c2.func1()
中间,console.log(‘1111’),会发现1111根本没输出。
c2根本没触发,而是你给process的 uncaughtException 注册了2个监听函数,所以c1
throw后,执行了2个函数。两个函数不同,但是内容是一样的。因为闭包的原因,一个_this.name为aaa,一个_this.name为bbb,e为error,所以就有上面的输出了
哦,原来是这样,就是说throw后程序就断了。那如何catch一个不受控的throw,并保持程序不断呢?
你这个根本就不是throw了两次 而是你绑定了两次uncaughtException事件, 所以输出了两次