常见报错类型 
RangeError 
这类错误很常见,例如栈溢出就是 RangeError;
js
function a () {
  b()
}
function b () {
  a()
}
a()
// out: 
// RangeError: Maximum call stack size exceededReferenceError 
ReferenceError 也很常见,打印一个不存在的值就是 ReferenceError:
js
hello
// out: 
// ReferenceError: hello is not definedSyntaxError 
SyntaxError 也很常见,当语法不符合 JS 规范时,就会报这种错误:
js
console.log(1));
// out:
// console.log(1));
//               ^
// SyntaxError: Unexpected token ')'TypeError 
TypeError 也很常见,当一个基础类型当作函数来用时,就会报这个错误:
js
var a = 1;
a()
// out:
// TypeError: a is not a function上面的各种 Error 类型中,SyntaxError 最为特殊,因为它是 编译阶段 抛出来的错误,如果发生语法错误,JS 代码一行都不会执行。而其他类型的异常都是 执行阶段 的错误,就算报错,也会执行异常之前的脚本。