函数声明方式提升【成功】
function test(){
foo();
function foo(){
console.info("I am foo!")
}
}
test();
函数表达式方式提升【失败】
function test(){
foo();//Uncaught TypeError: foo1 is not a function(…)
fly();//VM83:1 Uncaught ReferenceError: fly is not defined(…)
var foo =function fly(){
console.info("I am foo!")
}
}
test();
第二段里面的函数为啥fly没有提升,不也是声明式的吗?为啥一个是TypeError,fly是ReferenceError?
函数声明会提升,但是函数表达式不会。变量声明会提升,所以你执行
foo()
的时候foo
是undefined
不是函数所以会告诉你TypeError
。这种写法叫命名函数表达式,
fly
仅仅在函数体内可以访问。所以在外面使用告诉你ReferenceError