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

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

在这:

//Bunch of code...

当前回答

自调用函数在javascript:

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

其他回答

自我调用(也称为 自动调用)是当一个函数 立即执行 定义。这是一个核心模式 它是许多人的基础 JavaScript的其他模式 发展。

我是它的超级粉丝:)因为:

它使代码减至最少 它实现了行为与表示的分离 它提供了一个闭包,可以防止命名冲突

(为什么你要说它是好的?)

它是关于一次定义和执行一个函数。 你可以让这个自动执行的函数返回一个值,并将该函数作为参数传递给另一个函数。 它有利于封装。 它也适用于块作用域。 是的,你可以把你所有的.js文件封装在一个自动执行的函数中,并且可以防止全局命名空间污染。;)

更多的在这里。

看起来这个问题已经有了答案,但我还是会发表我的意见。

我知道什么时候我喜欢使用自动执行函数。

var myObject = {
    childObject: new function(){
        // bunch of code
    },
    objVar1: <value>,
    objVar2: <value>
}

该函数允许我使用一些额外的代码来定义childObjects的属性和属性,以获得更清晰的代码,例如设置常用的变量或执行数学方程;哦!或者错误检查。而不是局限于嵌套的对象实例化语法…

object: {
    childObject: {
        childObject: {<value>, <value>, <value>}
    }, 
    objVar1: <value>,
    objVar2: <value>
}

一般来说,编码有很多晦涩的方法来做很多相同的事情,这让你想知道,“为什么要麻烦呢?”但是新的情况不断出现,您不能再仅仅依赖基本/核心原则。

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

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

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

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

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

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

给你一个简单的问题:“在javascript中,什么时候你想使用这个:…”

我喜欢@ken_browning和@sean_holding的回答,但这里有另一个用例,我没有看到提到:

let red_tree = new Node(10);

(async function () {
    for (let i = 0; i < 1000; i++) {
        await red_tree.insert(i);
    }
})();

console.log('----->red_tree.printInOrder():', red_tree.printInOrder());

在节点。插入是某种异步操作。

我不能只是调用等待没有异步关键字在我的函数的声明,我不需要一个命名函数以后使用,但需要等待插入调用或我需要一些其他更丰富的功能(谁知道?)。