📜  JavaScript |立即调用函数表达式 (IIFE)

📅  最后修改于: 2022-05-13 01:58:10.611000             🧑  作者: Mango

JavaScript |立即调用函数表达式 (IIFE)

函数是任何编程语言的构建块之一,JavaScript 将函数提升到了一个全新的水平。函数被称为是在特定上下文中以适当顺序执行的语句的集合。现在 JavaScript 提供了多种方法来定义和执行函数,有命名函数,匿名函数,然后还有挂载后立即执行的函数,这些函数被称为立即调用函数表达式或 IIFE。让我们更深入地了解有关 IIFE 的更多信息。

语法: IIFE 遵循如下所示的特定语法。

(function (){ 
// Function Logic Here. 
})();

现在让我们进一步探讨一下,以了解此类函数的名称和语法之间的关系。

为什么命名为立即调用函数表达式?

  • 立即调用:这部分很容易解释和演示。这种类型的函数会被立即调用,因为这些函数一被挂载到堆栈就会被执行,它不需要显式调用来调用函数。如果我们看语法本身,我们有两对闭括号,第一对包含要执行的逻辑,第二个通常是我们调用函数时包含的内容,第二个括号负责告诉编译器函数表达式必须立即执行。
  • 函数表达式:很容易理解,函数表达式是用作表达式的函数。 JavaScript 允许我们使用函数作为函数表达式,如果我们将函数分配给一个变量,将函数包装在括号中或在函数前面放置一个逻辑 not。以下程序说明了我们可以创建函数表达式的不同方法。
    // Creating Function Expression by assigning to a variable.
    var myFunc = function() { return "GeeksforGeeks"; };
      
    // Creating Function Expression Using Logical Not.
    !function() { return "GeeksforGeeks"; };
      
    // Creating Function Expression Using Parentheses.
    (function() { return "GeeksforGeeks"; });
    

    现在,如果您查看第三个示例代码,它与 IIFE 语法的第一部分相同,因此我们可以得出结论,IIFE 的第一部分包含一个函数表达式,而最后一部分立即调用它。

将函数转换为 IIFE

正如我们已经看到什么是 IIFE 以及如何分解它的语法形式以使其更有意义,我们只需执行以下两个步骤即可将常规函数转换为 IIFE。

  • 给定任何常规函数定义,将定义包裹在一对封闭的括号中,这将创建您的函数表达式。
  • 最后添加另一对括号和一个分号来标记语句的结尾,您已经将常规函数转换为 IIFE。
    // Regular Function.
    function Greet()
    {
        console.log("Welcome to GFG!");
    };
    // Execution of Regular Function.
    Greet();
      
    // IIFE creation and execution.
    (function() { console.log("Welcome to GFG!"); })();
    

    输出:

    Welcome to GFG!
    Welcome to GFG!

要点

  1. IIFE 像 JavaScript 中的任何其他函数/变量一样遵循自己的范围。立即调用的名称部分有时会使新开发人员感到困惑,因为他们希望 IIFE 执行而与函数范围无关,这是错误的。例如,让我们看下面的示例,其中 IIFE 是在函数中定义的,并且只有在我们调用 Parent 函数时才会立即调用。
    function myFunc()
    {
        console.log("Welcome to");
        // This will be executed after executing the previous log.
        (function() { console.log("GeeksForGeeks!"); })();
        console.log("Hi There!");
    }
      
    // Calling the Function.
    myFunc();
    

    输出:

    Welcome to
    GeeksForGeeks!
    Hi There!
    
  2. IIFE 有自己的范围,即您在函数表达式中声明的变量在函数之外将不可用。
  3. 与其他函数类似,IIFE 也可以命名或匿名,但即使 IIFE 确实有名称,也无法引用/调用它。
  4. IIFE 也可以有参数。例如,
    // Declaring the parameter required.
    (function(dt) {
        console.log(dt.toLocaleTimeString());
        // Passing the Parameter.
    })(new Date());
    

    输出:

    4:30:12 PM