CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JavaScript] Aide débutant

C12-H22-O11
C12-H22-O11
Niveau 42
30 décembre 2014 à 15:58:45

:hello:

Je suis débutant en JavaScript et j'aurais besoin de quelques lumières.

Contexte : je dois écrire un script qui génère une table de multiplication.

Voici le code :
http://pastebin.com/Q8G8hfJ2

J'ai plusieurs questions :

:d) Est-ce que quelqu'un pourrait m'expliquer en détail ce que signifient les lignes 1 ; 2 ; 21 ; 24.
Ligne 1 : On crée un espace de nom ?
Ligne 2 : Pourquoi la fonction est précédée d'une parenthèse ouvrante et quel est ce paramètre (acronyme de Namespace) ?
Ligne 22 : On rend la fonction visible en dehors de l'espace de nom ?
Ligne 24 : Aucune idée.
Voilà j'aimerais bien que quelqu'un explicite un peu le code et la structure et de manière générale (NS et MULT), comment fonctionne le code ? Quelle est la fonction appelée en premier et pourquoi ?

:d) J'ai une erreur en essayant d'exécuter le code : "Uncaught ReferenceError init is not defined"
Je ne comprends pas d'où ça vient... Une idée ?

Merci beaucoup !

Caletlog
Caletlog
Niveau 10
30 décembre 2014 à 17:49:36

Salut,

Alors, c'est une syntaxe un poil plus 'compliquée' que le javascript basique.

Ligne 1 : on créée un objet MULT. Si cet objet existe déjà, on ne le change pas. S'il n'existe pas (ou vaut fals, undefined, 0, null, ...), on lui assigne un objet vide.

Ligne 2 : c'est ce qu'on appelle une IIFE (Immediately Invoked Function Expression) : c'est une fonction anonyme qui a l'ensemble de son scope privé, et qui est appelée immédiatement, avec les arguments passés en parenthèse à la fin de la définition de cette IIFE. Ici, le passage des arguments est fait en ligne 24.

Ligne 22 : C'est ça. La fonction a reçu un argument NS, qui est un objet. Elle créée une fonction tableMultiplication, et la rentre dans l'objet NS. Comme l'objet existait avant l'appel de la fonction, il est passé par référence, donc si on le modifie à l'intérieur de l'IIFE, les changements seront conservés une fois que l'on sera sorti de l'IIFE (on fais une closure).

Ligne 24 : comme dit plus haut, on passe l'objet MULT (qui jouera le rôle d'un namespace) à l'IIFE ligne 22.

D'une manière générale, je trouve le code inutilement complexe, là, comme ça, tiré de son contexte.
Au niveau du fonctionnement, on a une usine à fonctions table de multiplication (l'IIFE du début) qui remplit l'objet passé (MULT) avec la fonction générée. La fonction ecrireTableDocument prends en argument un tableau déjà tout fait, et l'insère dans l'élément d'ID TP1TableMulti dans le document . La fonction ecrireTableDirect est un wrapper autour de cette dernière fonction, elle prends un entier, génère la table de multiplications pour cet entier en appelant la fonction tableMultiplication de l'objet global MULT, puis le passe en argument à ecrireTabelDocument.

Ligne 35, on fait un alias pour avoir une copie de ecrireTableDirect en ecrireTable.

Enfin, les dernières lignes sont aussi une IIFE. A l'intérieur, on définit une fonction init qui crée le tableau de la table de multiplication de 5 et l'insère dans le document. Cette fonction init n'est appelée que lorsque tout le document et les images sont chargés, avec l'avant-dernière ligne qui ajoute l'événement de chargement ("load") à la fenêtre.

Du coup, je vais te laisser chercher un peu pour la question de ce qui est exécuté dans quel ordre, tu devrais avoir toutes les infos pour le faire maintenant.

C12-H22-O11
C12-H22-O11
Niveau 42
30 décembre 2014 à 18:37:02

Ok voilà c'était les fonctions anonymes que je n'avais pas trop compris, maintenant ça va.
Et j'ai résolu mon erreur d'exécution aussi.

C'est vrai que le code peut paraître compliqué pour si peu, mais le but c'était de comprendre le fonctionnement des espaces de noms !

:merci: beaucoup pour ta réponse (rapide !). Je passe à la suite. :fete:

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment