2011-09-28 52 views
5

在某些JS代码一些网站上我看到的Javascript代码,例如这样的:这是什么代码在Javascript中?

SomeName.init = (function() { 
    // some stuff 
})(); 

我的意思是,这是不是像这样一个jQuery插件代码:

(function($){ 
    $.fn.myPlugin = function() { 

    // Do your awesome plugin stuff here 

    }; 
})(jQuery); 

那么,什么是它?什么是结果JS对象?

+0

我......不知道你在问什么。这两个片段都演示了一个既被声明又被执行的函数。除此之外,他们似乎没有关系。 –

+0

第一个将匿名函数的结果设置为名为“init”的变量。如第二个例子所示,匿名函数是创建PLUG-IN(或模块)时经常使用的设计模式,因此通常称为“模块模式”。 –

+0

[这是我发现](http://stackoverflow.com/questions/5101638/what-does-this-javascript-code-mean)当我在搜索框中输入你的标题。 – user113716

回答

2

Module Pattern。这两个片段的共同点比您想象的要多。

8

这是一个匿名函数,它在使用var声明变量时不会将变量泄漏到全局范围。

SomeName.init = (function() { 
    return 3.1415; 
})(); 

SomeName.init是一个数字(3.1415),因为匿名函数声明执行函数()之后。有没有办法来获得原有的功能,除非该匿名函数中定义:

(function foo(){ 
    //foo refers to this function 
    too = foo; 
})();; 
//foo is undefined 
//too refers to the function, because `too` has been defined without var 
0

无论函数返回什么。

(function() { 
    //... 
})(); 

用作名称空间代码的一种方式,或者声明自我执行的构造函数。结果对象是自执行函数返回的内容。

第二个代码段不返回任何内容,并且没有resulting JS object

1
(function() { 
    // some stuff 
})() 

是一个匿名函数,它立即调用它自己。这只是一个关闭代码的闭包,用于阻止变量作用域变为全局变量。