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();
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();
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();
}
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.
Vous voulez dire la portée. ;) – daryl
Où exactement est-ce que je veux dire «portée»? – GarlicFries
"Une variable dans la fonction externe est visible à la fonction interne, mais pas vice versa." @Brennon – daryl
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.
@ 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