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!
要点
- 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!
- IIFE 有自己的范围,即您在函数表达式中声明的变量在函数之外将不可用。
- 与其他函数类似,IIFE 也可以命名或匿名,但即使 IIFE 确实有名称,也无法引用/调用它。
- IIFE 也可以有参数。例如,
// Declaring the parameter required. (function(dt) { console.log(dt.toLocaleTimeString()); // Passing the Parameter. })(new Date());
输出:
4:30:12 PM