关于函数声明与函数表达式的差异

发布于 2022-09-03 19:26:38 字数 654 浏览 35 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苏辞 2022-09-10 19:26:38

“那么这个在function后面的name到底是什么?”

不能在函数表达式(bar)之外通过真正的函数名(foo)来调用函数,也就是说这个函数名(foo)只能在函数内部使用,比如说递归时,可以通过这个函数名(foo),而不是被赋值为这个函数的变量(bar)来调用

“声明函数无法覆盖函数表达式,函数表达式可以覆盖函数声明”

因为函数与变量都会提升至所在作用域的顶部,且函数先提升。故 bar 变量(函数表达式)可以覆盖 bar 函数(函数声明)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文