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

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

函数是任何编程语言的基本构建块之一,JavaScript将这些函数提升到一个全新的水平。函数被视为一组语句,在特定上下文中按照适当的顺序执行。现在,JavaScript提供了各种方法来定义和执行函数,有带有名称的函数和匿名函数,还有一些在挂载时立即执行的函数,这些函数被称为 立即调用的函数表达式或IIFEs 。让我们深入了解更多关于IIFEs的内容。

语法: IIFEs遵循以下特定的语法。

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

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

为什么叫做立即执行的函数表达式?

  • 立即执行: 这一部分很容易解释和演示。这种类型的函数被称为立即执行,因为它们在被推入栈时立即执行,不需要显式调用。如果我们看一下语法本身,我们有两对闭合的括号,第一个包含要执行的逻辑,第二个通常是我们在调用函数时包含的内容,第二个括号负责告诉编译器要立即执行函数表达式。
  • 函数表达式: 很容易理解,函数表达式是一个作为表达式使用的函数。JavaScript允许我们使用函数作为函数表达式,如果我们将函数赋值给一个变量、将函数包裹在括号中或在函数前面放一个逻辑非。下面的程序示例演示了我们可以创建函数表达式的不同方式。
// 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。

示例:

<script> 
    // Regular Function. 
    function Greet() { 
        console.log("Welcome to GFG!"); 
    }; 
    // Execution of Regular Function. 
    Greet(); 
  
    // IIFE creation and execution. 
    (function() { 
        console.log("Welcome to GFG!"); 
    })(); 
</script>

输出:

Welcome to GFG!
Welcome to GFG!

重要的点

立即调用函数表达式(IIFE)跟JavaScript中的任何其他函数/变量一样,遵循自己的作用域。对于新开发者来说,“立即调用”这个名字有时会让人糊涂,他们会期望IIFE在函数作用域之外执行,这是错误的。例如,让我们看下面的示例,其中的IIFE被定义在一个函数内部,只有在调用父函数时,才会立即调用它。

示例:

<script> 
    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(); 
</script>

输出:

Welcome to
GeeksForGeeks!
Hi There!
  1. IIFEs拥有自己的作用域,即在函数表达式中声明的变量在函数外部将无法使用。
  2. 与其他函数类似,IIFEs也可以具有命名或匿名的形式,但是即使IIFE有一个名称,也无法引用或调用它。
  3. IIFEs也可以带有参数。例如,

示例:

<script> 
    // Declaring the parameter required. 
    (function(dt) { 
        console.log(dt.toLocaleTimeString()); 
        // Passing the Parameter. 
    })(new Date()); 
</script>

输出:

4:30:12 PM

IIFE的使用情况

  • 避免污染全局命名空间
  • 创建闭包
  • 避免库和程序之间的变量名冲突。
  • IIFE用于创建私有和公共变量和方法
  • 用于执行异步和等待函数
  • 在JQuery库中使用
  • 用于与require函数一起使用

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程