2012-02-01 4 views
4

pour l'architecture et à des fins espaces de noms, je veux faire:Une fonction imbriquée doit-elle toujours être redéfinie?

function outer (arr) { 
    function inner(arrElement) { 
    return doStuffTo(arrElement); 
    } 
    var results = []; 

    arr.forEach(element, index, array) { 
    results.push(inner(element)); 
    } 
    return results; 
} 

Donc, fondamentalement, une fonction au sein d'une fonction. Trucs simples. Mais outer() est quelque chose qui sera exécuté un lot. Cela signifie-t-il que la surcharge de définition d'une fonction (en plus de l'évaluer) s'appliquera chaque fois que outer() est appelée? Pour que cela soit efficace, dois-je définir inner() à l'extérieur?

+3

Oui, vous devez le définir à l'extérieur. –

+1

Y a-t-il des repères à ce sujet? –

+1

Si par * beaucoup *, vous voulez vraiment dire * beaucoup *, alors oui, définissez-le définitivement à l'extérieur. Pensez aussi à utiliser un itérateur javascript natif à la place de 'forEach' (oui, le javascript natif suce à l'itération, mais les appels de fonction sont chers). –

Répondre

4

Vous pouvez utiliser une fermeture:

var outer = (function() { 

    function inner(arrElement) { 
    return doStuffTo(arrElement); 
    } 

    return function (arr) { 
    var results = []; 
    arr.forEach(element, index, array) { 
     results.push(inner(element)); 
    } 
    return results; 
    } 
}()); 

intérieure est maintenue dans une fermeture et reste « privée » à extérieur, et est seulement créé une fois quand externe est initialisées.

+0

C'est exactement ce que je veux en termes d'impact sur l'espace de noms et la structure, merci! – Cera

Questions connexes