函数声明与函数表达式有什么区别?

在 JavaScript 中,函数声明和函数表达式都是创建函数的方式,但它们之间有一些关键的区别:

1. 语法 (Syntax):

  • 函数声明 (Function Declaration):

    function myFunction(param1, param2) {
        // 函数体
    }
    
  • 函数表达式 (Function Expression):

    const myFunction = function(param1, param2) {
        // 函数体
    }; // 注意这里有分号
    
    // 也可以使用箭头函数形式:
    const myFunction = (param1, param2) => {
        // 函数体
    };
    

2. 提升 (Hoisting):

  • 函数声明: 会被“提升”到作用域的顶部。这意味着你可以在声明函数 之前 调用它。

    myFunction(); // 可以调用,即使函数声明在后面
    
    function myFunction() {
        console.log("Hello");
    }
    
  • 函数表达式: 不会被提升。你必须在声明函数表达式 之后 才能调用它。

    myFunction(); //  报错! Cannot access 'myFunction' before initialization
    
    const myFunction = function() {
        console.log("Hello");
    };
    

3. 命名函数表达式:

函数表达式可以是命名的,也可以是匿名的。

  • 匿名函数表达式: 如上面的例子,函数没有名字。

  • 命名函数表达式: 函数表达式可以有一个名字,这在递归或调试时很有用。 这个名字只在函数内部作用域可见。

    const factorial = function fact(n) { // fact 是函数名,仅在函数内部作用域可见
        return n <= 1 ? 1 : n * fact(n - 1);
    };
    

4. 使用场景:

  • 函数声明: 通常用于定义独立的、可复用的函数。由于提升的特性,它们更适合在代码的顶部声明,以便在任何地方调用。

  • 函数表达式: 更灵活,常用于将函数作为参数传递给其他函数(回调函数)、创建闭包、以及在需要函数的地方直接定义函数。

总结:

特性 函数声明 函数表达式
语法 function name() {} const name = function() {};const name = () => {};
提升 会被提升 不会被提升
命名 必须命名 可以匿名或命名(命名仅在函数内部作用域可见)
使用场景 独立的、可复用的函数 回调函数、闭包、需要函数的地方直接定义

希望这个解释能够帮助你理解函数声明和函数表达式之间的区别。

posted @   王铁柱6  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示