Testez vos connaissances avec un Quiz sur l'usage avancé des fonctions en JavaScript

Le , par SylvainPV, Rédacteur/Modérateur


Les fonctions sont un des éléments les plus intéressants du langage JavaScript, mais beaucoup de leurs subtilités restent méconnues. Afin de mesurer vos connaissances et de vous faire découvrir de nouvelles manières d'utiliser les fonctions, un nouveau quiz JavaScript dédié aux fonctions vient d'être publié !

Quiz: Usage avancé des fonctions

Le quiz est de niveau difficile, donc pas de panique si vous n'avez pas la moyenne Et merci de ne pas indiquer des éléments de réponse dans vos commentaires.

Pour les plus chevronnés d'entre vous, je vous propose une onzième question pas piquée des vers. Etant donné son haut niveau d'inintelligibilité, je vous laisse vous échanger des pistes de réflexion publiquement dans les commentaires de ce topic.

QUESTION BONUS
11. A votre avis, à quoi sert la fonction suivante ?
Code : Sélectionner tout
var f = Function.bind.bind(Function.call);
a) à chaîner des fonctions en gardant toujours le même contexte d'appel
b) à transformer une méthode en fonction classique où l'instance est passée en argument
c) à modifier la fonction bind pour qu'elle exécute les fonctions sur lesquelles on l'appelle
d) à faire s'arracher les cheveux aux collègues

Merci à NoSmoking, SpaceFrog et vermine pour la relecture du quiz.

Participez également à nos autres quizz :
Les quizz JavaScript.
Tous les quizz de Developpez.com dont certains portent sur le CSS, HTML ou PHP.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Kaamo Kaamo - Membre expert https://www.developpez.com
le 12/01/2015 à 18:39
7/10, c'est mieux que mon score sur le DOM !
Sympathique ce petit test, j'aurais dû le faire demain matin après le café plutôt qu'en fin de journée, mais ma curiosité a eu le dessus

Pour la question BONUS, je dirais que c'est une sorte de wrapper qui évite de taper maFonction.call :
Code javascript : Sélectionner tout
1
2
3
4
5
function maFonction() { 
  console.log(this.nom); 
} 
  
maFonction.call({nom: 'Marty'}); // Marty
A la place, suffit donc de :
Code javascript : Sélectionner tout
1
2
var f = Function.bind.bind(Function.call); 
f(maFonction)({nom: 'Marty'});
Mais à quoi ça peut servir à part donner un contexte d'exécution à maFonction ?
Je trouve qu'utiliser maFonction.call(context) est plus clair.
Avatar de lysandro lysandro - Membre averti https://www.developpez.com
le 13/01/2015 à 10:07
9/10 mais la réponse à la question 9 est une réponse par défaut
@Kaamo: sans tester ?

Ah et merci, ça fait du bien
Avatar de Kaamo Kaamo - Membre expert https://www.developpez.com
le 13/01/2015 à 10:17
Bien oui sans tester
J'ai échoué à la 5 et à la 8 & 9 sur les closures. Parce qu'utiliser une closure, c'est cacher la valeur de certaines variables aux utilisateurs selon moi. ça ne peut pas marcher aussi comme réponse ?
Avatar de lysandro lysandro - Membre averti https://www.developpez.com
le 13/01/2015 à 10:45
Bravo!
La valeur d'une simple variable locale dans une fonction est aussi cachée pour l'utilisateur, non ?
Avatar de Kaamo Kaamo - Membre expert https://www.developpez.com
le 13/01/2015 à 11:29
Oui c'est inaccessible via le scope global.
Je trouve que la réponse 3) de la question 9 pourrait aussi bien être une bonne réponse. En définissant des variables dans une closure, on rend inaccessible leur manipulation des utilisateurs mais pas des développeurs bien sûr
Avatar de lysandro lysandro - Membre averti https://www.developpez.com
le 13/01/2015 à 11:38
Bin même en tant que developpeur, à part modifier le source de la fonction oeuf corse ça me semble difficile et dans ce cas on peut tout faire donc je dirais que non
Avatar de p3ga5e p3ga5e - Membre confirmé https://www.developpez.com
le 13/01/2015 à 12:19
8/10 ! Moi aussi j’ai été plus inspiré que le quiz sur le DOM

J’ai eu une hésitation sur la première question et me suis, du coup, planter sur la dernière
Du coup je me pose la question, à savoir si cela a été normalisé par l’ECMA car il me semble qu’il y a encore peu cela avait de comportement diffèrent selon les environnements Javascript
Avatar de SylvainPV SylvainPV - Rédacteur/Modérateur https://www.developpez.com
le 13/01/2015 à 14:05
J'ai justement changé la proposition C de la Q9 avant publication pour lever complètement le doute. Le fait qu'une variable soit dans une portée locale ne permet pas de cacher sa valeur, elles pourront toujours être retrouvées par l'utilisateur final. Ce n'est pas beaucoup plus compliqué de mettre un breakpoint que de fouiller les variables globales. Et ce n'est pas le rôle des closures de toute manière.

Pour la Q10 la réponse peut être retrouvée dans les spécifications ECMA-262.

Concernant la question bonus, Kaamo a compris le principe général. Quelqu'un a une idée de à quoi cela pourrait servir ?
Avatar de Kaamo Kaamo - Membre expert https://www.developpez.com
le 13/01/2015 à 15:54
J'ai failli mettre la Réponse 4 pour la Question 10. En effet, le résultat peut-être, légèrement, différent selon si la fonction est native ou non
Avatar de lysandro lysandro - Membre averti https://www.developpez.com
le 13/01/2015 à 17:40
Citation Envoyé par SylvainPV  Voir le message
Quelqu'un a une idée de à quoi cela pourrait servir ?

Mis à part ce qu'a écrit Kaamo c'est à dire de passer d'un appel de méthode à un appel de fonction :
object.method(...) ==> methodFn(object, ...) avec methodFn = F(object.method)
J'avais écrit une bétise tout à l'heure qui pourrait être une conséquence de ce type d'écriture et qui consisterait à se passer de 'this' pour l'écriture de nouvelle fonctions (mais personne ne veut refaire du C, surtout sans pointeur ).
Ce qui me chagrine, c'est que j'ai lu un truc quelque part qui parlait de ça mais j'ai complétement oublié peut-être en rapport avec la programmation fonctionnelle ? ou alzheimer ?
Peu importe, j'attends avec impatience les propositions de réponses ! +1 pour la question
Responsable bénévole de la rubrique JavaScript : Xavier Lecomte -