javascript - js 函数和变量的hoisting,第二段里面的函数为啥fly没有提升?
本文介绍了javascript - js 函数和变量的hoisting,第二段里面的函数为啥fly没有提升?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
函数声明方式提升【成功】
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
。
var foo =function fly(){
console.info("I am foo!")
}
这种写法叫命名函数表达式,fly
仅仅在函数体内可以访问。所以在外面使用告诉你ReferenceError
这篇关于javascript - js 函数和变量的hoisting,第二段里面的函数为啥fly没有提升?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文