Javascript 我的生活和匿名的亲密关系是肯定的。

Javascript 我的生活和匿名的亲密关系是肯定的。,javascript,module,self-invoking-function,Javascript,Module,Self Invoking Function,这里是Javascript新手。在阅读模块模式时。我注意到这个匿名函数在函数范围内有括号。我以前没用过这个。我想更好地理解它 // first example (function(){ //this is IIFE I always use to avoid globle var. I think the simple form of this is F(); })(); // second example (function () { //However, what is t

这里是Javascript新手。在阅读模块模式时。我注意到这个匿名函数在函数范围内有括号。我以前没用过这个。我想更好地理解它

// first example
(function(){
    //this is IIFE I always use to avoid globle var. I think the simple form of this is F();
})();

// second example
(function () {
    //However, what is this concept? what's the formal name of this function? 
}());

这两者的主要区别是什么?我如何理解第二个示例?

通常,您不需要包装纸,如果您移除包装纸,您会看到它们是相同的:

function(){}()
function(){}()
在上面,这已经是一种生活了

但如果该函数没有用作表达式,例如在赋值中,则JavaScript会认为它是一个函数声明。要消除代码歧义并强制表达式,可以执行各种操作,如添加括号:

// Same thing
(function(){}())
(function(){})()
或使用一元运算符:

!function(){}()
+function(){}()
void function(){}()

当用于创建或导入模块时,它们的工作方式是否完全相同?我在学习像这样的模块模式时遇到了这个问题,我很确定这其中有一些细微的差别(因为一些验证器建议使用第二个而不是第一个),但从功能上来说,它们在一个非全局范围的范围内立即执行代码。它们的计算结果完全相同。有些人只是觉得第二个看起来更好,第一个看起来就像你在说的,在这个例子中,我们不希望JavaScript将function(){}()看作是一个声明。我们希望它将其视为表达式,因此我们将()放在它的一侧,并将其包装在paren中以强制表达式。
()
是执行函数,这就是它的生命。