在javascript中,什么时候你想使用这个:

(function(){
    //Bunch of code...
})();

在这:

//Bunch of code...

当前回答

这都是关于变量作用域的。默认情况下,在自执行函数中声明的变量仅可用于自执行函数中的代码。这允许编写代码时不考虑变量在其他JavaScript代码块中的命名方式。

例如,正如Alexander在评论中提到的:

(函数(){ Var foo = 3; console.log (foo); }) (); console.log (foo);

这将首先记录3,然后在下一个console.log上抛出一个错误,因为foo没有定义。

其他回答

你可以使用这个函数返回值:

var Test = (function (){ const alternative = function(){ return 'Error Get Function '}, methods = { GetName: alternative, GetAge:alternative } // If the condition is not met, the default text will be returned // replace to 55 < 44 if( 55 > 44){ // Function one methods.GetName = function (name) { return name; }; // Function Two methods.GetAge = function (age) { return age; }; } return methods; }()); // Call console.log( Test.GetName("Yehia") ); console.log( Test.GetAge(66) );

自调用函数在javascript:

自动调用(启动)自调用表达式,而不需要调用。自调用表达式在创建后立即被调用。这主要用于避免命名冲突以及实现封装。变量或声明的对象在此函数之外不可访问。为了避免最小化(filename.min)的问题,总是使用自执行函数。

是否有一个参数和“一串代码”返回一个函数?

var a = function(x) { return function() { document.write(x); } }(something);

关闭。something的值被赋给a的函数使用。something可以有一些变化的值(for循环),每次a都有一个新函数。

自执行函数用于管理变量的作用域。

变量的作用域是程序中定义变量的区域。

全局变量具有全局作用域;它在JavaScript代码中的任何地方都有定义,并且可以从脚本中的任何地方访问,甚至在函数中。另一方面,在函数中声明的变量只能在函数体中定义。 它们是局部变量,具有局部作用域,并且只能在该函数中访问。函数参数也算作局部变量,只在函数体中定义。

如下所示,您可以在函数中访问全局变量变量,并注意在函数体中,具有相同名称的局部变量优先于全局变量。

var globalvar = "globalvar"; // this var can be accessed anywhere within the script

function scope() {
    alert(globalvar);
    var localvar = "localvar"; //can only be accessed within the function scope
}

scope(); 

因此,基本上,自执行函数允许编写代码,而无需考虑其他javascript代码块中的变量如何命名。

由于Javascript中的函数是一等对象,通过这样定义它,它有效地定义了一个类似于c++或c#的“类”。

该函数可以定义局部变量,并在其中包含函数。内部函数(实际上是实例方法)可以访问局部变量(实际上是实例变量),但它们将与脚本的其余部分隔离。