2011-07-21 4 views
7

Est-il possible d'avoir une fonction dans une autre fonction comme ça?Fonction jquery dans une fonction

function foo() { 

    // do something 

    function bar() { 

     // do something 

    } 

    bar(); 

} 

foo(); 
+1

@ gion_13: à proprement parler, avoir une fonction dans une fonction n'est pas une "fermeture". L'aspect selon lequel la fonction conservera toutes les variables dans sa portée même si elles ne font pas partie du corps de la fonction elle-même (c'est-à-dire des variables non locales) en fait une "fermeture". – FK82

Répondre

14

Oui, vous pouvez l'avoir comme ça. bar ne sera visible par personne en dehors de foo.

Et vous pouvez appeler bar à l'intérieur comme foo:

function foo() { 

    // do something 

    function bar() { 

     // do something 

    } 
    bar(); 

} 
+0

J'ai mis à jour un peu le code, est-ce encore possible? Désolé pour la question stupide. – daryl

+0

:). Je viens d'ajouter cela à ma réponse. Oui, vous pouvez. – Mrchief

3

Ce qu'on appelle une fonction imbriquée en Javascript. La fonction interne est privée à la fonction externe, et forme également une fermeture. Plus de détails sont disponibles here.

Faites particulièrement attention aux collisions de noms de variables, cependant. Une variable de la fonction externe est visible pour la fonction interne, mais pas l'inverse.

+1

Vous voulez dire la portée. ;) – daryl

+0

Où exactement est-ce que je veux dire «portée»? – GarlicFries

+0

"Une variable dans la fonction externe est visible à la fonction interne, mais pas vice versa." @Brennon – daryl

4

Oui, vous pouvez.
Ou vous pouvez le faire,

function foo(){ 

    (function(){ 

     //do something here 

    })() 

} 

Ou cela,

function foo(){ 

    var bar=function(){ 

     //do something here 

    } 

} 

Ou vous voulez que la fonction "bar" pour être universel,

function foo(){ 

    window.bar=function(){ 

     //something here 

    } 

} 

Hop cela vous aide.