IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[Article] Trois fondamentaux de JavaScript


Sujet :

JavaScript

  1. #1
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut [Article] Trois fondamentaux de JavaScript


    Jean-Pierre Vincent vous propose un nouvel article : Trois fondamentaux de JavaScript.

    Au-delà de rappeler certains aspects importants de JavaScript, l'article présente des notions relativement avancées de programmation JavaScript.

    Trois fondamentaux de JavaScript

    à lui !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par Jean-Pierre Vincent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function genericFunctionName() {
        for(i = 0; i < myArray.length; i++) {
            console.log(i);
        }
    }
    for(i = 0; i < 10; i++) {
        genericFunctionName();
    }
    Nous avons simplement une fonction qui parcourt un tableau fictif, puis nous appelons cette fonction 10 fois. N'exécutez surtout pas cela dans votre navigateur, car c'est une boucle infinie !
    Et pourquoi pas ? Ca fait juste planter le navigateur et au moins on s'en rend compte par soit même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    if( 1 == 1 ) {
        // l'exécution du code passe ici ...
        function action() {
            console.log('a == 1');
        }
        } else {
            // ... pourtant le compilateur se souvient de cette fonction
            function action() {
            console.log('a != 1');
        }
    }
    action(); // a != 1
    Bizarre le principe des portées en JavaScript. Dans la plupart des langages mainstream (Java, C, C++...) une portée est définie par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {
    une nouvelle portée
    }
    En JavaScript, la seule façon de créer une nouvelle portée est donc de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (function() { 
    }())
    Et donc en quelque sorte créer un objet portée (ou alors faut-il obligatoirement un appel à new pour créer un objet ?).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    myClass.prototype = {
        decrement:function() {
            console.log( --this.publicVariable );
        },
        increment:function() {
            console.log( ++this.publicVariable );
        }
    };
    Ne peut-on pas plutôt écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    myClass.decrement = function() {
            console.log( --this.publicVariable );
    };
    myClass.increment = function() {
            console.log( ++this.publicVariable );
    };
    dont la syntaxe parait plus lisible ?

    Merci Pour cette article très instructif sur ce qu'il faut faire et ce qu'il ne faut pas faire (et que je faisais dans mes rares développement Javascript)

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 119
    Points : 777
    Points
    777
    Par défaut
    Citation Envoyé par atha2 Voir le message
    Bizarre le principe des portées en JavaScript. Dans la plupart des langages mainstream (Java, C, C++...) une portée est définie par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    {
    une nouvelle portée
    }
    En JavaScript, la seule façon de créer une nouvelle portée est donc de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (function() { 
    }())
    Et donc en quelque sorte créer un objet portée (ou alors faut-il obligatoirement un appel à new pour créer un objet ?).
    En fait, une portée, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    function() { PORTÉE }
    et c'est tout. new n'y change rien, le fait que ça soit auto-exécuté non plus (les parenthèses après la définition de la fonction)

  4. #4
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Article très instructif

    c'est typiquement le genre de briques qu'il me manquait pour comprendre correctement les codes que je rencontre fréquement. Même si je comprenais le côté fonctionnel de ce que je devais lire, ces astuces syntaxiques me faisaient mal aux yeux à chaque fois et je ne pouvais pas m'empêcher de me demander "à quoi pensait le type qui a écrit ça???? pourquoi déclarer une fonction anonyme et l'exécuter juste derrière, au lieu de faire du code inline???".

    Maintenant, je sais
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    Encore un bon article de base pour les débutants.

    Un petit mot quand même sur une nouvelle fonctionnalité de javascript.
    Le mot clé let permet maintenant de déclarer et limiter la porté d'une variable dans un bloc d’exécution plus classique , à savoir {}. Comme en java...

    Concernant le nommage des fonctions. Outre pour le débogage, cette notation est surtout utile , est a été mise en place, pour la récursivité, en permettant de déclarer et d'implémenter le fonction d'un coup, limitant un peu le code à écrire

    par exemple au lieu de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var maFn = function(){
        if(truc)
            setTimeout(maFn , 1000);
    };
    setTimeout(maFn , 1000);
    On peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    setTimeout(function maFn (){
        if(truc)
            setTimeout(maFn , 1000);
    }, 1000);

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 119
    Points : 777
    Points
    777
    Par défaut
    @kimjoa : effectivement, vu qu'en ecmascript 5 en mode strict les choses du genre arguments.callee sera interdit, ta notation sera intéressante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    setTimeout(function maFn (){
        if(truc)
            setTimeout(maFn , 1000);
    }, 1000);
    Sinon aujourd'hui, sans le mode strict pour les settimeout récursifs on utilise plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    setTimeout(function (){
        if(truc)
            setTimeout(arguments.callee , 1000);
    }, 1000);

Discussions similaires

  1. [Article] Amélioration progressive et JavaScript
    Par Eusebe dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/04/2009, 14h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo