错误处理 - try catch
try catch 无法捕获的错误
try...catch
无法捕获异步错误和语法错误。
window.onerror = err => {
console.log('全局捕获错误', err)
}
// 测试异步错误
try {
let x = 1;
setTimeout(() => {
x = x + y
})
} catch (err) {
console.log('异步错误', err)
}
// 抛错: Uncaught ReferenceError: y is not defined
// 测试语法错误
try {
const a = '1;
} catch(err) {
console.log('语法错误', err)
}
// 抛错: Uncaught SyntaxError: Invalid or unexpected token
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
finally
即使try...catch...
语句块里存在return
,finally
里的语句也会执行,且finally
里的return
会覆盖try
里的return
。
function foo(){
try{
return 0;
} catch(err) {
// ...
} finally {
console.log("a")
}
}
console.log(foo());
// 结果
// a
// 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function foo(){
try{
return 0;
} catch(err) {
} finally {
console.log("a")
return 1;
}
}
console.log(foo());
// 结果
// a
// 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16