JavaScript中的(function() { } )()构造是什么?

945

我想知道这是什么意思:

(function () {

})();

这是否基本意味着document.onload


23
顺便说一下,虽然你会看到人们称这个函数为“自我调用”,但这显然不是真的。术语“立即调用函数表达式(IIFE)”具有更高的准确性优势。 - AakashM
6
这篇文章很好地解释了这个概念,并且也是“立即调用函数表达式”一词的起源所在。http://benalman.com/news/2010/11/immediately-invoked-function-expression/ - jeremysawesome
2
关于这个结构的命名,请参考这里。阅读有关此结构的目的,以及技术解释(还可以在这里找到)。关于语法,请查看为什么需要括号它们应该放在哪里 - Bergi
https://dev59.com/KHE95IYBdhLWcg3wMa51 - Adriano
可能是JavaScript中自执行函数的目的是什么?的重复问题。 - Tobias Kienzler
28个回答

1

IIFE(立即调用函数表达式)是一种在脚本加载时立即执行并消失的函数。

考虑下面这个函数,它被写在名为iife.js的文件中。

(function(){
       console.log("Hello Stackoverflow!");
   })();

这段代码将在加载iife.js时立即执行,并在开发者工具的控制台上打印“Hello Stackoverflow!”。

如需详细说明,请参见立即调用函数表达式(IIFE)


0
自调用匿名函数之所以被使用,是因为它们不应该被其他代码调用,因为它们“设置”了应该被调用的代码(同时为函数和变量提供作用域)。
换句话说,它们就像程序中“创建类”的程序。在它们被实例化(自动地)之后,唯一可用的函数是由匿名函数返回的函数。然而,所有其他“隐藏”的函数仍然存在,并且任何状态(在作用域创建期间设置的变量)也都存在。
非常酷。

0

这个函数被称为自调用函数。自调用(也称自执行)函数是一个没有名称(匿名)的函数,它在定义后立即调用(被调用)。在这里阅读更多

这些函数的作用是,在定义函数时,立即执行函数,这样可以节省时间和代码行数(与在单独一行中调用相比)。

以下是一个例子:

(function() {
    var x = 5 + 4;
    console.log(x);
})();


0
在ES6语法中(为了自己而发布,因为我一直在这个页面上寻找一个快速的例子):
// simple
const simpleNumber = (() => {
  return true ? 1 : 2
})()

// with param
const isPositiveNumber = ((number) => {
  return number > 0 ? true : false
})(4)

-1

-1
立即调用函数表达式(IIFE)是一种在创建时立即执行的函数。它与任何事件或异步执行无关。您可以按照以下方式定义IIFE:
(function() {
     // all your code here
     // ...
})();

第一对括号 function(){...} 将括号内的代码转换为表达式。第二对括号调用由该表达式产生的函数。
一个 IIFE 也可以被描述为自执行匿名函数。它最常见的用途是通过 var 声明限制变量的作用域,或者封装上下文以避免名称冲突。

-2

通常情况下,JavaScript 代码在应用程序中具有全局作用域。当我们在其中声明全局变量时,有可能在开发的其他区域中使用相同的重复变量以实现其他目的。由于这种重复可能会导致一些错误,因此我们可以通过使用即时调用函数表达式来避免这些全局变量,这个表达式是自执行表达式。当我们将代码放入这个IIFE表达式中时,全局变量就会像本地作用域和本地变量一样。

我们可以使用两种方式创建IIFE

(function () {
    "use strict";
    var app = angular.module("myModule", []);
}());

或者

(function () {
    "use strict";
    var app = angular.module("myModule", []);
})();

在上面的代码片段中,“var app”现在是一个局部变量。

-3
通常情况下,我们在程序中编写函数后不会立即调用它。简单来说,当您在创建函数后立即调用它时,这被称为IIFE - 一个花哨的名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接