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

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

在这:

//Bunch of code...

当前回答

IIRC允许你创建私有属性和方法。

其他回答

首先你必须访问MDN IIFE,现在关于这一点有几点

这是立即调用的函数表达式。当你的javascript文件从HTML中调用这个函数时立即调用。 这防止了在IIFE习惯用法中访问变量以及污染全局作用域。

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

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) );

(function(){
    var foo = {
        name: 'bob'
    };
    console.log(foo.name); // bob
})();
console.log(foo.name); // Reference error

实际上,上面的函数将被视为没有名称的函数表达式。

用左右圆括号包装函数的主要目的是避免污染全局空间。

函数表达式中的变量和函数变成私有的(也就是说,它们在函数外部是不可用的)。

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

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

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

简单的回答是:防止全球(或更高)范围的污染。

IIFE(立即调用函数表达式)是将脚本编写为插件、附加组件、用户脚本或任何期望与其他人的脚本一起工作的脚本的最佳实践。这可以确保您定义的任何变量都不会对其他脚本产生不良影响。

这是另一种写IIFE表达式的方法。我个人更喜欢以下方法:

void function() {
  console.log('boo!');
  // expected output: "boo!"
}();

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/void

从上面的例子可以很清楚地看出,IIFE也会影响效率和性能,因为原本预计只运行一次的函数实际上只执行了一次,然后就永远被丢弃了。这意味着函数或方法声明不会保留在内存中。