|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Inscription : avril 2006 Messages : 244 ![]() |
Bonjour à tous,
Une question qui concerne la syntaxe JavaScript et je voudrais être sûr de bien comprendre... Dans un programme que j'ai récupéré, je rencontre le code suivant : Code :
__________________
Guy777 |
||
|
|
00
|
|
|
#2 | ||||||||||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 420 ![]() |
Il s'agit d'une "Closure"
le principe est le suivant définir et appeler un fonction anonyme pour isoler du code du reste. l'intérêt est d'isoler les définition dans un espace clos et de ne pas interférer avec le reste sauf à le faire explicitement. un exemple Code :
on entre dans le nouveau contexte et on utilise toto du contexte principal mais on redéfini titi à -1 on sort du contexte local et on affiche toto et titi qui valent toujours 45 et 99 la syntaxe est Code :
Code :
le appelle la fonction anonyme contenue dans les première () on peut s'en servir pour définir un singleton avec des membres privés. Code :
le code JS ne peut y accéder hors de ce contexte mais le singleton est lui défini dans ce contexte il peut donc y accéder Code :
|
||||||||||
|
|
20
|
|
|
#3 |
|
Membre actif
![]() Inscription : avril 2006 Messages : 244 ![]() |
Merci de ta réponse rapide, sekaijin.
Avant de la lire, j'étais en train de lire un doc sur les fermetures (en anglais), comme quoi j'étais sur la bonne piste ! Si je comprends bien tout, car ce n'est pas simple au premier abord, cela peut permettre de créer des applications javascript qui "n'empiètent pas" sur le contexte général, et ainsi éviter (par exemple) d'écraser une variable par la réutilisation accidentelle d'un nom de variable déjà défini ... Une dernière petite question : dans le code que je fourni le (window) permet d'appeler la fonction anonyme en lui passant l'objet window comme premier paramètre et en ignorant le deuxième (undefined sera donc null) ? J'espère me faire bien comprendre !!!
__________________
Guy777 |
|
|
00
|
|
|
#4 | ||
|
Expert Confirmé
![]() ![]() Urbaniste Inscription : juillet 2004 Messages : 1 420 ![]() |
windows est un objet global
il n'est pas nécessaire le passer en paramètre mais pour que les choses soient claire certain développeurs le passe en paramètres ainsi on vois clairement que la closure utilise l'objet en question. effectivement undefined vaudra null dans ton cas. c'est une façon étrange de faire. en général on ne le redéfini pas. le redéfinir de la sorte peut à mon avis poser des pbs Code :
A+JYT |
||
|
|
00
|
|
|
#5 | |||||
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 450 ![]() |
Citation:
En Javascript, contrairement à Java et d'autres langages, les fonctions sont uniquement déterminées par leur noms. Le nombre d'argument n'est absolument pas pris en considération. Ainsi, une fonction avec la signature function test(a, b, c) "répondra" aux appels suivants : Code :
EDIT (en complément de sekaijin) : Lorsqu'on ne passe pas l'argument, il est exactement "undefined" mais peut être vu comme "null" : Code :
|
|||||
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Inscription : avril 2006 Messages : 244 ![]() |
Merci à tous pour vos réponses précises...
__________________
Guy777 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com