有人可以解释这个 javascript 片段吗?

Can somebody explain this javascript fragment?

// JavaScript source code
var foo = (function () {
    var o = { bar: "bar" };

    return {
        bar: function () {
            console.log(o.bar);
        }
    };

})();

foo.bar();

这是怎么回事? foo 是一个对象吗?它是一个命名函数吗? 这看起来像是提供私有数据成员的 class 概念的可怕方式....

foo 是一个对象。它是 return 语句之后的对象。

此代码在这些括号内声明了一个函数,然后立即调用它。然后 foo 被赋予函数 returns.

的任何值

他们被称为IIFEhttps://developer.mozilla.org/en-US/docs/Glossary/IIFE

检查这个使用 IIFE 的示例 http://javascriptissexy.com/understand-javascript-closures-with-ease/

通常javascript个模块写在模式中。

var foo = function () {
    var o = { bar: "bar" };

    return {
        bar: function () {
            console.log(o.bar);
        }
    };

};

foo().bar();

var foo = (function () {
    var o = { bar: "bar" };

    return {
        bar: function () {
            console.log(o.bar);
        }
    };

})();

foo.bar();

相似。