看了mdn对于throw的解释:throw语句用来抛出一个用户自定义的异常。当前函数的执行将被停止(throw之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个catch块。如果调用者函数中没有catch块,程序将会终止。
如下代码:并不会打印1和2.
function test(){
throw new Error('lalal');
console.log(1);
}
test();
console.log(2);
但是下面的代码,为什么可以打印出2呢。不是throw之后的语句将不会执行吗?
setTimeout(function () { throw new Error('test');console.log(1) }, 0)
setTimeout(function () { console.log(2) }, 2000)
代码就像在一条路上走,一个大石头(Throw)下来,走不动了。但这是说的同步代码的情况
setTimeout 是异步代码,每个 setTimeout 就像是新开了一条路,一条路断了不影响另一条