SlideShare une entreprise Scribd logo
1  sur  51
Javascript


Les fondamentaux



   Jean-pierre VINCENT (indépendant)
   Pierre lagarde (Microsoft)
Qui ça ?
     Jean-pierre VINCENT

braincracking.org (veille techno)
@theystolemynick

12 ans de Web
Consultant, formateur, expertise
Pourquoi Javascript ?
Présent partout
●
 Navigateur
●
 Jeux Web (remplace Flash)
●
 Mobile (Phonegap ...)
●
 Télévisions
●
 Serveur (Node.js, ...)
●
 Software (Chromeless, ...)
●
 OS (JoliCloud, WebOS...)
●
 Windows 8 !
Mauvaise réputation
Mauvaise réputation

parseInt('06'); // 6
parseInt('08'); // 0




      wftjs.com
Mauvaise réputation

typeof NaN // number
NaN === NaN // false

typeof null // object
null instanceof Object // false



          wftjs.com
Mauvaise réputation

(1.7976931348623157e+308 ===
1.7976931348623158e+308 )// true!

alert(111111111111111111111); //
alerts 111111111111111110000

9999999999999999 //=> 10000000000000000


              wftjs.com
APIs
●
    DOM (window.document)

●
    Node

●
    WinRT

●
    ...
Compliqué ?
Différent !
Historique court
●
  Né pendant la guerre (95)
●
  En quelques semaines
●
  Influence Erlang, Lisp, Python, Askell


    IE et Netscape d'accord pour
            EcmaScript 3
Evolution
●
 EcmaScript 5
●
 Harmony
●
 EcmaScript.Next
●
 EcmaScript.Next.Next
En attendant ...


   EcmaScript 3
Objectifs

Portée des variables (var + function)
●




Contexte (this)
●




Function()
●
Portée des variables

 1 closure = 1 portée

Closure = function() {
    PORTÉE
}
Portée des variables
test1 = function() {
     var x = 1;




    console.log(x); // 1
}();
console.log(x); // undefined
Portée des variables
test1 = function() {
     var x = 1;
     test2 = function() {
     var x = 2;



    console.log(x); // 2
    }();
    console.log(x); // ?
}();
console.log(x); // undefined
Portée des variables
test1 = function() {
     var x = 1;
     test2 = function() {
     var x = 2;



    console.log(x); // 2
    }();
    console.log(x); // 1
}();
console.log(x); // undefined
Portée des variables
test1 = function() {
     var x = 1;
     test2 = function() {
     var x = 2;
     test3 = function() {
     console.log(x); // 2
     }();
     console.log(x); // 2
     }();
     console.log(x); // 1
}();
console.log(x); // undefined
Démo « porté et boucle »
Morales

1 Toujours utiliser var
Application pratique


Démo « module pattern »
Créer un scope
1/3 : fonction anonyme

 function() {
    var privateVariable = true;
    console.log( privateVariable );
 }
Créer un scope
1/3 : fonction anonyme

 function() {
    var privateVariable = true;
    console.log( privateVariable );
 }
=> parse error
Créer un scope
2/3 : parler gentiment au parser

( function() {
    var privateVariable = true;
    console.log( privateVariable );
})
=> rien
Créer un scope
3/3 : auto-exécution

( function() {
     var privateVariable = true;
     console.log( privateVariable );
})()
=> true
Application pratique

(function() {
     var privateVariable = true;
     window.init = function() {
          console.log( privateVariable );
     }
}())

init(); // true
console.log(privateVariable);//undefined
Morales

1 Toujours utiliser var
2 Utiliser le pattern module
Contexte


this = contexte d'exécution
Contexte


Démo « contexte »
Contexte - DOM
myClass = function() {
     this.id = 'myClass';
     this.getId = function() {
          console.log(this.id);
     };
};

myObject = new myClass();
document.body.onclick = myObject.getId;
// document.body.id
Contexte – fix portée
myClass = function() {
     this.id = 'myClass';
     var me = this;
     this.getId = function() {
        console.log(me.id);
     };
};
myObject = myClass();

document.body.onclick = myObject.action;
// 'myClass'
Contexte – fix portée

Démo du fix
Morales

1 Toujours utiliser var
2 Utiliser le pattern module
3 Verrouiller le contexte
Function()
Déclarations
●
  function action() {}


action = function() {}
●
Function()
Déclarations
●
  function action() {}


action = function() {}
●




Exécution
●


 action();
Function()



Un petit jeu ?
function action()
Le hoisting, c'est pratique


action(); // true

function action() {
    console.log(true);
}
function action()
Le hoisting, c'est dangereux
if( 1 === 1) {
  function action() {
    console.log('1 === 1');
  }
} else {
  function action() {
     console.log('1 !== 1');
  }
}
function action()
Implicitement sensible à la portée


(function() {
     function action() {
          console.log('action');
     }
}())
action(); // undefined
var action = function()


Plus explicite donc moins dangereux
Morales

1 Toujours utiliser var
2 Utiliser le pattern module
3 Verrouiller le contexte
4 déclarer ses fonction avec var
action = function() { }
Avant la Démo « mise en pratique »

     Utilisation des
     ●


écrasements de fonction
Utilisation des
     écrasements de fonction
var bind =
 function( el, ev, callback) {
  if(document.body.attachEvent){
         el.attachEvent('on'+ev, callback);
  } else {
         el.addEventListener( ev, callback);
     }
};

         Le test est fait à chaque exécution
return function()
var bind =
function( el, ev, callback) {
  if(document.body.attachEvent)
     return function(el, ev, callback) {
element.attachEvent('on'+event, callback);
     };
  else
      return function(el, ev, callback) {
   el.addEventListener( ev, callback);
      };
}();
Démo « mise en pratique »


Problème : écouter la liste d'éléments
Teasing : 17h30 amphi Havane


  OOJS, bonnes pratiques...
Conclusion


Javascript est différent, apprenez le
Questions ?
Jean-pierre VINCENT
braincracking.org
@theystolemynick


RDV maintenant :
stand Generative Objects
(N° 55 à côté HP)

Contenu connexe

Tendances

Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
Jean-Pierre Vincent
 

Tendances (20)

Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Présentation JavaScript
Présentation JavaScriptPrésentation JavaScript
Présentation JavaScript
 
Les fondamentaux du langage C
Les fondamentaux du langage CLes fondamentaux du langage C
Les fondamentaux du langage C
 
Cours php
Cours phpCours php
Cours php
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Requêtes HTTP synchrones et asynchrones
Requêtes HTTPsynchrones et asynchronesRequêtes HTTPsynchrones et asynchrones
Requêtes HTTP synchrones et asynchrones
 
Cpp2 : classes et objets
Cpp2 : classes et objetsCpp2 : classes et objets
Cpp2 : classes et objets
 
Csharp1 : quelques elements de base
Csharp1 :  quelques elements de baseCsharp1 :  quelques elements de base
Csharp1 : quelques elements de base
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
Initiation au code : Ateliers en C# (applications desktop et mobile native)
Initiation au code : Ateliers en C# (applications desktop et mobile native)Initiation au code : Ateliers en C# (applications desktop et mobile native)
Initiation au code : Ateliers en C# (applications desktop et mobile native)
 

Similaire à Introduction à JavaScript

Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?
Ruau Mickael
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
Ruau Mickael
 

Similaire à Introduction à JavaScript (20)

Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentaux
 
Javascript Json artchitecture
Javascript  Json artchitecture Javascript  Json artchitecture
Javascript Json artchitecture
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Javascript pour les développeurs Java : quels sont les pièges à éviter ?
Javascript pour les développeurs Java : quels sont les pièges à éviter ?Javascript pour les développeurs Java : quels sont les pièges à éviter ?
Javascript pour les développeurs Java : quels sont les pièges à éviter ?
 
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
Atoum, le framework de tests unitaires pour PHP 5.3 simple, moderne et intuit...
 
Javascript #4.2 : fonctions for pgm
Javascript #4.2 : fonctions for pgmJavascript #4.2 : fonctions for pgm
Javascript #4.2 : fonctions for pgm
 
Javascript : que fait ce code?
Javascript : que fait ce code?Javascript : que fait ce code?
Javascript : que fait ce code?
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
Vert.x 3
Vert.x 3Vert.x 3
Vert.x 3
 
Tp-jquery
Tp-jqueryTp-jquery
Tp-jquery
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Des tests modernes pour Drupal
Des tests modernes pour DrupalDes tests modernes pour Drupal
Des tests modernes pour Drupal
 
Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012Gatling Tool in Action at DevoxxFR 2012
Gatling Tool in Action at DevoxxFR 2012
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Librairies Java qui changent la vie
Librairies Java qui changent la vieLibrairies Java qui changent la vie
Librairies Java qui changent la vie
 
Ruby STAR
Ruby STARRuby STAR
Ruby STAR
 
Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?Javascript - Fonctions : que fait ce code ?
Javascript - Fonctions : que fait ce code ?
 

Plus de Microsoft

Plus de Microsoft (20)

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieu
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaS
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobile
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à Z
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs Analytics
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site Recovery
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET Core
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeurs
 

Introduction à JavaScript

Notes de l'éditeur

  1. 2/6/12
  2. 2/6/12
  3. 2/6/12
  4. 2/6/12
  5. 2/6/12
  6. 2/6/12
  7. 2/6/12
  8. 2/6/12
  9. 2/6/12
  10. 2/6/12
  11. 2/6/12
  12. 2/6/12
  13. 2/6/12
  14. 2/6/12
  15. 2/6/12
  16. 2/6/12
  17. 2/6/12
  18. 2/6/12
  19. 2/6/12
  20. 2/6/12
  21. 2/6/12
  22. 2/6/12
  23. 2/6/12
  24. 2/6/12
  25. 2/6/12
  26. 2/6/12
  27. 2/6/12
  28. 2/6/12
  29. 2/6/12
  30. 2/6/12
  31. 2/6/12
  32. 2/6/12
  33. 2/6/12
  34. 2/6/12
  35. 2/6/12
  36. 2/6/12
  37. 2/6/12
  38. 2/6/12
  39. 2/6/12
  40. 2/6/12
  41. 2/6/12
  42. 2/6/12
  43. 2/6/12
  44. 2/6/12
  45. 2/6/12
  46. 2/6/12
  47. 2/6/12
  48. 2/6/12