2010-12-07 5 views
0

Si je fonction d'origine (comme exemple):auto-Allégation fonction JavaScript Anonymous - retour plusieurs objets

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

et je suis allé de l'avant et fait cela en une auto-invocation fonction anonyme JS, comme tel:

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

Est-ce que je fais quelque chose de paradoxal? Je voudrais accéder à x et y en tant que variables globales, mais la fonction anonyme auto-invoquante est utile dans d'autres domaines que je ne vais pas entrer dans les détails en ce moment - je veux juste le garder.

dois-je faire quelque chose comme:

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 
    })() 

ou

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

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

semble un peu redondant?

+0

Dans votre deuxième extrait de code, je crois que vous allez créer une instance locale de '' x' et y' et ainsi ne serez pas en mesure d'accéder à ces globalement. Manquer 'var' va créer des variables globales. Cependant je ne sais pas pourquoi vous voudriez faire ceci sans voir le contexte. –

Répondre

3

Je ne suis pas sûr de ce que l'objectif d'al cela est, mais vous pourriez peut-être revenir les deux fonctions dans un objet, comme suit:

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(); 

C'est essentiellement ce que le motif du module est d'environ (voir, exemple http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth).

C'est bon! En fonction de ce dont vous avez besoin, bien sûr.

1

Vous pouvez:

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