自动执行功能

Joe*_*Joe 10 javascript

可能重复:
(function(){})()之间的差异; 和function(){}();

我试图更好地理解JavaScript的一些功能.在The Definitive JavaScript其中说自动执行的函数应该有括号围绕它们:

var obj = (function() {
    var value = 0;

    return {
        increment: function(inc) {
            value += typeof inc === "number" ? inc : 1;
        },
        getValue: function() {
            return value;
        }
    }
})();
Run Code Online (Sandbox Code Playgroud)

但是在JavaScript - The Good Parts这个例子取自的地方,它具有上述自执行功能而没有括号圆,如下所示:

var obj = function() {
    var value = 0;

    return {
        increment: function(inc) {
            value += typeof inc === "number" ? inc : 1;
        },
        getValue: function() {
            return value;
        }
    }
}();
Run Code Online (Sandbox Code Playgroud)

这两个例子都适用于我,但我想问一下我应该注意的功能是否有任何差异.我希望这不是太微不足道.我只是想确定一下.

非常感谢.

编辑:

正如Rob W指出的那样,关于这个问题还有另一个主题.这是一篇关于此问题的优秀博客,该博客与其他帖子相关联.

Aln*_*tak 13

这种情况没有任何区别,只是因为它的前缀是:

var obj = ...
Run Code Online (Sandbox Code Playgroud)

没有它,只有第一个版本是正确的,因为你需要额外的括号来允许解释器正确地解析function函数表达式而不是函数声明.

你当然只会省略var obj如果你只想运行该函数(即你想要它的副作用)但它没有返回任何值,或者你不关心它的返回值是什么.