ReferenceError:报错
虽然函数声明会得到提升(fun函数被提升),但是函数表达式(func=function bar(){})不会得到提升。在调用bar函数时,bar函数并没有声明,找不到bar()函数所在的作用域。所以报了ReferenceError错误。
总结:当查找作用域失败时会报ReferenceError
TypeError:报错
函数声明var foo=function....函数声明提升,为foo()分配在了全局作用域,调用foo()时,此时foo还没有进行赋值逻辑,值为undefined,对undefined进行函数调用,导致了非法操作,抛出了TypeError
总结:当对变量做一些非法或不合理的操作时会报TypeError