这样做是为了可读性。
您给出的两个示例之间没有真正的功能差异,但它们都非常接近简单的函数声明,is不同的。添加括号是为了提高可读性,以便区分它们。
以下是每个片段的作用:
在两个片段的第一个片段中,第一个括号将被计算为所包含函数的值。然后这个值将被作为函数调用。所以最终该函数将被执行,这可能是您关心的。
在第二个代码片段中,外括号将被评估为包含声明为内联并立即执行的函数。同样,该函数将被执行,这可能仍然是您关心的。
这两者都将执行相同的功能,因此不会有任何显着差异。
像您这样的代码片段和简单的函数声明之间的区别:
您提供的功能也与以下功能相同。我刚刚添加了一个函数名称并分配了返回值以保证语法准确性,您现在可以忽略它。
// javascript...
var val =
function myFooFunc () {
alert("foo");
}();
然而,这很容易被误认为是简单的函数声明,这是不同的:
// javascript...
function myFooFunc () {
alert("foo");
}
请注意,这里唯一真正的区别是最后一个函数声明不会立即执行。其他人都是。因此,这是一种非常不同的行为(如果按名称调用,则简单声明可能会稍后执行,或者可能根本不会执行)。然而,通常很难立即看出语法上的差异,特别是当函数体变得非常长并且需要在屏幕上滚动时。
为什么函数会立即执行?
当一个函数在声明后立即执行时,该值通常会被返回到某个东西(它可能是赋值语句的一部分)。有时该函数会立即执行,因为它包含内部函数并用于为封闭的语句提供功能范围。
本质上,人们用括号括住“立即执行”形式(您的两个片段,以及我的两个片段中的第一个),以便向其他开发人员提供该函数正在立即调用的视觉提示。它只是更容易阅读,因为您可能直到到达函数末尾(或根本注意到它们)才看到括号。