IIFE的JQuery命名空间模式

时间:2015-07-24 21:41:14

标签: javascript jquery

我是Javascript的新手,想要熟悉最佳实践。

今天我遇到了一个新的构造,我需要社区帮助理解。代码依赖于Jquery。构造如下。

$(function() {

    var data = {
        //
    };

    var cont = {
        //
    init: function(){
        }
    };

    var view = {
    //
    };

cont.init();

}());

我对此的理解是将IIFE传递到JQuery名称空间。

令我困惑的是,代码只包含3个文字而且没有return语句。你看我从模块模式的角度来看这个。在这种情况下,IIFE中使用的模块将返回包含任何预期公共函数的对象文字。

此代码不返回对象。实际上,只是将3个对象文字(data,cont,view)添加到JQuery名称空间中?然而,我的另一部分认为这只会将undefined返回到JQuery名称空间。请指教。

2 个答案:

答案 0 :(得分:0)

  

我对此的理解是将IIFE传递到JQuery名称空间。

没有

IIFE执行并返回undefined(因为它没有返回语句)。

调用

$并将undefined传递给它。然后丢弃$的返回值,因为代码对它没有任何作用。

此处对$的调用毫无意义。所有有趣的东西都发生在IIFE内部(当cont.init()被调用时)。

答案 1 :(得分:-2)

<强>更新

请忽略我的回答。我对代码的理解是错误的。

您的代码没有意义,我认为它不会执行任何操作。它不是IIFE。以下是Immediately-Invoked Function Expression的更多信息。 IIFE与jQuery无关。它是一种定义函数的Javascript方法,也可以立即运行。

如果您这样做,那么它就是IIFE,它会立即显示警报。这不需要jQuery。

(function() {
    var cont = {
       init: function () { 
               alert('test');
             }
       };
    cont.init();
})();

这段代码的作用是定义一个具有cont对象的匿名函数。在cont内,它定义了一个init对象,该对象被设置为另一个匿名函数。通过执行cont.init(),您将调用init具有的功能。

关闭---即你的主要功能周围的() - 定义它。之后的()会调用该函数。