2010-12-07 58 views
0

如果我有原來的功能(作爲一個例子):匿名自調用JavaScript函數 - 返回多個對象

var x = function() { alert('tadaaa'); return 1; } 
var y = function() { alert('tadaaa'); return 1; } 

,我已經先行一步,並取得此爲自調用匿名JS功能,例如:

(function() { 
    var x = function() { alert('tadaaa'); return 1; } 
    var y = function() { alert('tadaaa'); return 1; } 
})() 

我在做什麼似是而非的事情?我想訪問x和y作爲全局變量,但自調用匿名函數在其他領域很有用,我現在不詳細討論 - 我只是想保留它。

我應該做這樣的事情:

var x= (function() { 
     var x = function() { alert('tadaaa'); return 1; } 
     var y = function() { alert('tadaaa'); return 1; } 
     // Should I be doing something like 
     return x 
    })() 

var x= (function() { 
     var x = function() { alert('tadaaa'); return 1; } 
     return x 
    })() 

    var y = (function() { 
     var x = function() { alert('tadaaa'); return 1; } 
     return y 
    })() 

似乎有些多餘?

+0

在你的第二個代碼片段,我相信你將創建x`和`y`的`本地實例,因此將無法在全球範圍內訪問這些。丟失`var`會創建全局變量。然而,我不確定爲什麼你會想在沒有看到上下文的情況下做到這一點。 – 2010-12-07 12:14:19

回答

3

我不知道人的目標,這是什麼,但也許你可以在一個對象同時返回功能,像這樣:

var funcs = (function() { 
    var x = function() { alert('tadaaa'); return 1; }; 
    var y = function() { alert('tadaaa'); return 1; }; 
    return {x: x, y: y}; 
})(); 

funcs.x(); 
funcs.y(); 

這基本上就是模塊模式被有關(見示例http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth)。

這很好!當然,取決於你需要什麼。

1

您可以:

var x, y; 
(function() { 
    x = function() { alert('tadaaa'); return 1; } 
    y = function() { alert('tadaaa'); return 1; } 
})();