2011-09-28 82 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 
})() 

是一個匿名函數,它立即調用它自己。這只是一個關閉代碼的閉包,用於阻止變量作用域變爲全局變量。