立即调用的匿名JavaScript函数的术语是什么?


29

我正在为团队编写JavaScript样式指南,以便我们可以更轻松地组织和贡献文档。但是我遇到了一个小障碍,这就是我的问题所在...

我应该如何调用立即调用的匿名JavaScript函数。我知道我可以简单地将其称为“匿名函数”,但我想强调一下它被立即调用的事实。

这是一个例子:

var MyVariable = (function(data){
  return "another value"
})("some value"); 

console.log(MyVariable);
// "another value"

1
请注意,您经常会(不准确地)看到此构造,称为“自调用函数”
AakashM 2015年

Answers:


39

在Javascript世界中,他们已经有一个术语。它们被称为立即调用函数表达式(IIFE)

这是什么

IIFE函数未命名。相反,当解释器遇到它们时,它们将被执行一次:

var area = function() {
    var width = 3;
    var height = 2;
    return width * height;
}();

最后括号的码块的右大括号后告诉解释立即调用的函数表达式。

如果编写函数声明,则必须在函数周围添加分组运算符或括号,以告诉解释器将函数视为可以立即调用的表达式:

var area;
(function() {
    var width = 3;
    var height = 2;
    area = width * height;
}());


使用时

IIFE用于仅在任务中运行一次而无需重复调用的代码。

  1. 作为调用函数(作为计算值等)时的参数
  2. 将属性的值分配给对象。
  3. 在事件处理程序和侦听器中。
  4. 为了防止可能使用相同变量名的两个脚本之间发生冲突。它们可以用作包装器,以在另一个不确定变量名是否相同的脚本中放置代码。

一个nitpick:在您使用的示例中var area = ...,您不需要在函数上加上“包装”括号,因为由于位于的右侧,它已经是一个函数表达式=。仅当将函数编写为函数声明时(即,不带前导var area = ...),才需要使用括号。
埃里克·金

@EricKing我做对了吗?
劳伦斯·艾洛

能更随意地称这些“表达功能”为好
过滤器2015年

@LawrenceAiello我添加了一个编辑以显示我的意思。希望它仍然对您有用。
埃里克·金

作为一个相关问题,是否有任何理由将问题显示给IIFE?我只看过这些像您演示的那样-没有任何参数(因为任何参数都可以是局部变量)。
凯特2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.