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

时间:2017-11-14 22:21:50

标签: iife



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

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

})();

foo.bar();




发生了什么事? foo是一个对象吗?它是一个命名函数吗? 这看起来像是一种提供私有数据成员的类概念的可怕方式....

2 个答案:

答案 0 :(得分:1)

foo是一个对象。它是返回语句后面的对象。

此代码在这些括号中声明一个函数,然后立即调用它。然后为foo分配函数返回的任何值。

答案 1 :(得分:1)

他们被称为IIFE的{​​{3}}

检查此示例使用IIFE的地方https://developer.mozilla.org/en-US/docs/Glossary/IIFE

通常javascript模块都是以模式编写的。

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

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

};

foo().bar();

AND

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

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

})();

foo.bar();

类似。