|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre à l'essai
![]() Inscription : janvier 2011 Messages : 34 ![]() |
bonjour, je suis en train d'apprendre javascript plus en profondeur et actuellement il n'y a rien qui n'echappe a google
mais voila il y a une syntaxe que je n'arrive pas a définir exemple : Code :
évidement la recherche de function javascript sur google retourne rien ok je vient de tester et donc la fonction s'execute seule ! dans ce cas, quelle est la difference entre Code :
|
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() Inscription : janvier 2011 Messages : 2 944 ![]() |
Bonjour,
- dans le cas de la syntaxe var f = (function(){...} tu pourras prototyper f - dans le cas de la syntaxe function f(){...} tu ne fais qu'un simple nommage de fonction. cas #1 : Code :
edit 1 : j'admets cela reste léger comme explication... edit 2 : biffage de l'ânerie ! |
||
|
|
00
|
|
|
#3 | ||||||||
|
Membre éclairé
![]() F5(){F5} Inscription : avril 2008 Messages : 256 ![]() |
bonjour,
lorsque tu déclares il y a une pré compilation ou le moteur va rendre la fonction accessible dans le scope ou elle a été définie. genre Code :
Code :
Lorsque tu écris tu définis f au moment du mot clé var. Donc si tu écris Code :
la syntaxe de la dernière sert à créer une fonction anonyme. Par exemple tu ne peux pas écrire Code :
function test(){}();//pour appeler test directement. Code :
Enfin attention, on peut prototyper une fonction qqsoit le cas. |
||||||||
|
|
10
|
|
|
#4 | ||
|
Membre Expert
![]() Eric GaridacciInscription : septembre 2005 Messages : 1 057 ![]() |
Salut,
Un petit code où nous pouvons voir qu'il est bien entendu possible de passer des arguments à la fonction. Code :
__________________
N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ... |
||
|
|
00
|
|
|
#5 | |||
![]() ![]() Inscription : janvier 2011 Messages : 2 944 ![]() |
Citation:
...on peut effectivement prototyper une fonction nommée. Revenons juste à la différence fct est une variable qui fait référence à la fonction. fct est le nom de la fonction. et le cas dont nous parle manserk Code :
|
|||
|
|
10
|
|
|
#6 | ||||
|
Membre éclairé
![]() F5(){F5} Inscription : avril 2008 Messages : 256 ![]() |
Code :
Autrement dit , Code :
|
||||
|
|
00
|
|
|
#7 | |||
![]() ![]() Inscription : janvier 2011 Messages : 2 944 ![]() |
Citation:
l'écriture Code :
nota : je pense qu'il va falloir acheter/lire JavaScript : Gardez le meilleur ! |
|||
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() F5(){F5} Inscription : avril 2008 Messages : 256 ![]() |
lol le 1-1
attention, il va peut-etre se transformer en décisif! Code :
(function test(){console.log('lol')})(); test(); |
|
|
00
|
|
|
#9 | |||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Chez moi j'ai une erreur :
Citation:
Pour creuser un peu dans la structure du langage, faut regarder les parenthèses : Les parenthèses vertes encadrent la déclaration de notre fonction, ce qui forme un ensemble parenthèses + fonction, que l'interpréteur va considérer comme une expression. Ceci a pour effet intéressant de provoquer l'interprétation immédiate de la fonction. En rouge, nous avons les parenthèses habituelles qui servent à appeler une fonction. Ainsi, la fonction qui vient d'être interprétée est à présent exécutée. Ensuite, comme elle faisait partie d'une expression, elle n'est pas gardée en mémoire, peu importe qu'elle ait été nommée ou non. Comme l'a dit galerien69, les closures permettent de protéger ses variables. En effet, les variables locales déclarées dans la fonction sont inaccessibles depuis l'extérieur. Du moins… En théorie ! Car un phénomène étrange se produit parfois : Code JS :
La variable locale x est toujours vivante ! En fait, quand une fonction sort d'une closure, l'interpréteur garde dans un coin une référence sur l'ensemble des variables locales, pour pouvoir les réutiliser. Et ces variables restent en mémoire tant que la fonction n'est pas détruite. Moi je trouve que ça ressemble à un objet avec des variables privées, mais chacun voit ce qu'il veut
__________________
Disposition de clavier ergonomique française : Bépo |
|||
|
|
00
|
|
|
#10 | |||||
|
Membre Expert
![]() Eric GaridacciInscription : septembre 2005 Messages : 1 057 ![]() |
Citation:
Je donne la pierre pour me faire lapider et donne le baton pour reçevoir les coups ![]() J'aurais codé ça... Code :
<justification type="tentative" status="honteux" cause="IE notamment"> En fait, quand j'ai vu que le (désormais pseudo-) code ci-dessous fonctionnait, je me suis dit "Tiens ?! Ca marche !"</justification> Opera (et je présume tous les autres aussi) réagit comme il faut en renvoyant une erreur.
__________________
N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ... |
|||||
|
|
00
|
|
|
#11 |
|
Membre à l'essai
![]() Inscription : janvier 2011 Messages : 34 ![]() |
Merci c'est plus clair pour moi maintenant
même si a la premiere lecture ça l'était pas
|
|
|
00
|
|
|
#12 | |||||
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 807 ![]() |
@watilin
Citation:
Code :
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|||||
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Certes !
Mais le garbage-collector ne peut pas savoir quelles variables sont susceptibles de se trouver dans le scope de la fonction, notamment à cause de l'existence d'eval, ou encore si la closure contient des objets qui se référencent les uns les autres. Du coup il doit garder toutes les variables. Code JS :
__________________
Disposition de clavier ergonomique française : Bépo |
||
|
|
00
|
|
|
#14 | |||||
|
Membre habitué
![]() Étudiant Inscription : mai 2011 Messages : 226 ![]() |
Citation:
Code :
|
|||||
|
|
01
|
|
|
#15 | |
![]() ![]() Inscription : janvier 2011 Messages : 2 944 ![]() |
Citation:
Il semblerait que nous soyons en présence d'une fuite de mémoire et que la référence soit maintenue. |
|
|
|
00
|
|
|
#17 |
|
Membre éclairé
![]() F5(){F5} Inscription : avril 2008 Messages : 256 ![]() |
De toute façon, IE est une référence
|
|
|
00
|
|
|
#18 | ||
|
Membre Expert
![]() Eric GaridacciInscription : septembre 2005 Messages : 1 057 ![]() |
Ayant WinXP, je ne peux pas tester IE9. Je voudrais savoir par curiosité si ce dernier renvoie aussi function comme ses prédécesseurs au lieu de undefined.
Code :
__________________
N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ... |
||
|
|
00
|
|
|
#19 |
![]() ![]() Inscription : janvier 2011 Messages : 2 944 ![]() |
cette fuite de mémoire reste bien inférieure à la mienne
c'est une façon de voir les choses, mais attendu qu'une fonction expression, "ne survit pas", voir ce qu'en dit la "spécification"... ...IE dans ce cas ne libère pas la mémoire, néanmoins il est capable de se resservir de l'objet crée, et c'est en quoi effectivement on peut ne pas parler de réelle fuite de mémoire. edit to Eric2A, navré pas de IE9 pour moi non plus... |
|
|
00
|
|
|
#20 | ||
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 573 ![]() |
Merci à tous pour cette intéressante discussion, mais j'avoue que j'ai eu un léger choc en lisant ce détail dans le post initial...
![]() Citation:
Citation:
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com