关于函数声明与函数表达式的差异
function bar() {
console.log("bar");
}
bar() //"bar"
var bar = function() {
console.log("bar");
}
bar() //"bar"
var bar = function foo() {
console.log("bar");
}
foo() //Error
那么这个在function后面的name到底是什么?
还有一点疑惑声明和表达式并不等价
var bar = function() {
console.log("bar1");
}
function bar() {
console.log("bar2");
}
bar()
声明函数无法覆盖函数表达式
function bar() {
console.log("bar2");
}
var bar = function() {
console.log("bar1");
}
bar()
但是函数表达式可以覆盖函数声明
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
“那么这个在function后面的name到底是什么?”
不能在函数表达式(bar)之外通过真正的函数名(foo)来调用函数,也就是说这个函数名(foo)只能在函数内部使用,比如说递归时,可以通过这个函数名(foo),而不是被赋值为这个函数的变量(bar)来调用
“声明函数无法覆盖函数表达式,函数表达式可以覆盖函数声明”
因为函数与变量都会提升至所在作用域的顶部,且函数先提升。故 bar 变量(函数表达式)可以覆盖 bar 函数(函数声明)