Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带IIFE的JQuery命名空间模式_Javascript_Jquery - Fatal编程技术网

Javascript 带IIFE的JQuery命名空间模式

Javascript 带IIFE的JQuery命名空间模式,javascript,jquery,Javascript,Jquery,我是Javascript新手,希望熟悉最佳实践 今天我遇到了一个新的结构,我需要社区的帮助来理解它。代码依赖于Jquery。结构如下 $(function() { var data = { // }; var cont = { // init: function(){ } }; var view = { // }; cont.init(); }()); 我的理解是IIFE被

我是Javascript新手,希望熟悉最佳实践

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

$(function() {

    var data = {
        //
    };

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

    var view = {
    //
    };

cont.init();

}());
我的理解是IIFE被传递到JQuery命名空间中

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

此代码不返回对象。事实上,3个对象文本(数据、cont、view)是否只是简单地添加到JQuery名称空间?然而,我的另一部分认为这将简单地将
未定义的
返回到JQuery名称空间。请告知

我的理解是IIFE被传递到JQuery命名空间中

没有

IIFE执行并返回
未定义的
(因为它没有返回语句)

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


调用
$
在这里是没有意义的。所有有趣的事情都发生在IIFE内部(当调用
cont.init()
时)。

更新

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



你的代码没有意义,我认为它不会执行任何东西。这不是一种生活。这里有更多的信息。iLife与jQuery无关。这是一种定义函数并立即运行它的Javascript方法

如果你做了这样的事情,那就是一种生活,它会立即显示警报。这不需要jQuery

(function() {
    var cont = {
       init: function () { 
               alert('test');
             }
       };
    cont.init();
})();
这段代码的作用是定义一个匿名函数,它有一个
cont
对象。在
cont
中,它定义了一个
init
对象,该对象被设置为另一个匿名函数。通过执行
cont.init()
,您正在调用
init
具有的函数


闭包——即围绕主函数的
——定义了它。之后的
()
调用该函数。

实际上,您的代码很混乱。IIFE是这样的
(函数(){…})()。现在,如果希望在DOM就绪时使用jQuery运行函数,可以这样做:
$(函数(){…})$(document)的快捷方式。ready(function(){…})
$(function(){…})
@ImranNazir-不。
$()
根据你传递给它的内容做了很多不同的事情。传递它
undefined
没有任何用处。它是
$(document)的缩写形式。准备好了吗
,只有当你传递一个函数时才可以,而这个函数不是。@Quentin,好的,所以它传递的是未定义的,但它可能被看作是一种在JQR名称空间内执行代码的方法,从而使它远离全局名称空间“在JQR名称空间内执行代码”-不可以。您不能“在命名空间内”执行代码。JavaScript本身没有名称空间。JavaScript中的名称空间是一个全局变量(一个对象n次)的对象,其名称由一组相关代码使用(因此您有
ME.foo
ME.bar
ME
是一个全局变量,而不是将
foo
bar
作为两个全局变量)。这与此无关,它只调用jQuery函数,不传递任何内容。生命避免仅仅通过成为一个生命而创造出全球性。将其返回值传递给jQuery函数没有任何用处。“它不是IIFE。”-是的,它是。它以
function(){
开始,以
}()
结束(它在表达式上下文中,所以不会出错,因为你不能用
()
来跟随函数声明)。“iLife与jQuery无关”-它与jQuery无关,这就是为什么问题是问为什么在
$(
之间使用iLife)
“闭包——即(和)”——这不是闭包。本例中的
是调用
$
函数的参数。当您从另一个函数返回一个函数并从返回的函数内部访问外部函数范围内的变量时,您会得到一个闭包。@Quentin,如果他定义了一个IIFE,为什么它不能正确执行cont.init()?您如何定义闭包?谁说它没有正确执行
cont.init()
?通过从另一个函数返回函数并从返回函数内部访问外部函数范围内的变量来定义闭包。