错误处理 - 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

finally

即使try...catch...语句块里存在returnfinally里的语句也会执行,且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
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