【问题标题】:Can somebody explain this javascript fragment?有人可以解释这个 javascript 片段吗?
【发布时间】:2017-11-14 22:21:49
【问题描述】:

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

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

})();

foo.bar();

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

【问题讨论】:

标签: iife


【解决方案1】:

他们被称为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();

相似。

【讨论】:

  • 是的,当您添加这些额外的括号时,您将在分配期间执行该函数。就好像你已经有了返回值。查看上面链接的文章,它有一个很好的例子。
【解决方案2】:

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

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

【讨论】:

  • 我不确定,看起来 foo 是一个命名函数,它被分配了一个函数,是的,一个 iife....
  • @SirPaulMuaddib:请仔细阅读;它被分配给调用函数的结果。
猜你喜欢
  • 2011-07-17
  • 2015-09-14
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 2011-05-31
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多