51
Javascript Les fondamentaux Jean-pierre VINCENT (indépendant) Pierre lagarde (Microsoft)

Fondamentaux portée - contexte - function ms tech days

Embed Size (px)

DESCRIPTION

Decouvrez les particularités de JavaScript qui vous aideront à débogguer sans craindre ce langage aujourd'hui indispensable.- la portée des variables et comment ne pas polluer l'espace global- comprendre le mot clé this- les particularités des fonctions- introduction aux namespacesLoin de la théorie vous aurez des explications pratiques et des démos de code ainsi que les bonnes pratiques.

Citation preview

Page 1: Fondamentaux   portée - contexte - function ms tech days

Javascript

Les fondamentaux

Jean-pierre VINCENT (indépendant) Pierre lagarde (Microsoft)

Page 2: Fondamentaux   portée - contexte - function ms tech days

Qui ça ?Jean-pierre VINCENT

braincracking.org (veille techno)@theystolemynick

12 ans de WebConsultant, formateur, expertise

Page 3: Fondamentaux   portée - contexte - function ms tech days
Page 4: Fondamentaux   portée - contexte - function ms tech days

Pourquoi Javascript ?

Page 5: Fondamentaux   portée - contexte - function ms tech days

Présent partout●Navigateur●Jeux Web (remplace Flash)●Mobile (Phonegap ...)●Télévisions●Serveur (Node.js, ...)●Software (Chromeless, ...)●OS (JoliCloud, WebOS...)●Windows 8 !

Page 6: Fondamentaux   portée - contexte - function ms tech days

Mauvaise réputation

Page 7: Fondamentaux   portée - contexte - function ms tech days

Mauvaise réputation

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

wftjs.com

Page 8: Fondamentaux   portée - contexte - function ms tech days

Mauvaise réputation

typeof NaN // numberNaN === NaN // false

typeof null // objectnull instanceof Object // false

wftjs.com

Page 9: Fondamentaux   portée - contexte - function ms tech days

Mauvaise réputation

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

alert(111111111111111111111); // alerts 111111111111111110000

9999999999999999 //=> 10000000000000000

wftjs.com

Page 10: Fondamentaux   portée - contexte - function ms tech days

APIs● DOM (window.document)

● Node

● WinRT

● ...

Page 11: Fondamentaux   portée - contexte - function ms tech days

Compliqué ?

Page 12: Fondamentaux   portée - contexte - function ms tech days

Différent !

Page 13: Fondamentaux   portée - contexte - function ms tech days

Historique court● Né pendant la guerre (95)● En quelques semaines● Influence Erlang, Lisp, Python, Askell

IE et Netscape d'accord pourEcmaScript 3

Page 14: Fondamentaux   portée - contexte - function ms tech days

Evolution

●EcmaScript 5●Harmony●EcmaScript.Next●EcmaScript.Next.Next

Page 15: Fondamentaux   portée - contexte - function ms tech days

En attendant ...

EcmaScript 3

Page 16: Fondamentaux   portée - contexte - function ms tech days

Objectifs

●Portée des variables (var + function)

●Contexte (this)

●Function()

Page 17: Fondamentaux   portée - contexte - function ms tech days

Portée des variables

1 closure = 1 portée

Closure = function() {PORTÉE

}

Page 18: Fondamentaux   portée - contexte - function ms tech days

Portée des variablestest1 = function() {

var x = 1;

console.log(x); // 1}();console.log(x); // undefined

Page 19: Fondamentaux   portée - contexte - function ms tech days

Portée des variablestest1 = function() {

var x = 1;test2 = function() {var x = 2;

console.log(x); // 2}();console.log(x); // ?

}();console.log(x); // undefined

Page 20: Fondamentaux   portée - contexte - function ms tech days

Portée des variablestest1 = function() {

var x = 1;test2 = function() {var x = 2;

console.log(x); // 2}();console.log(x); // 1

}();console.log(x); // undefined

Page 21: Fondamentaux   portée - contexte - function ms tech days

Portée des variablestest1 = 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

Page 22: Fondamentaux   portée - contexte - function ms tech days

Démo « porté et boucle »

Page 23: Fondamentaux   portée - contexte - function ms tech days

Morales

1 Toujours utiliser var

Page 24: Fondamentaux   portée - contexte - function ms tech days

Application pratique

Démo « module pattern »

Page 25: Fondamentaux   portée - contexte - function ms tech days

Créer un scope1/3 : fonction anonyme

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

}

Page 26: Fondamentaux   portée - contexte - function ms tech days

Créer un scope1/3 : fonction anonyme

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

}=> parse error

Page 27: Fondamentaux   portée - contexte - function ms tech days

Créer un scope2/3 : parler gentiment au parser

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

})=> rien

Page 28: Fondamentaux   portée - contexte - function ms tech days

Créer un scope3/3 : auto-exécution

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

})()=> true

Page 29: Fondamentaux   portée - contexte - function ms tech days

Application pratique

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

console.log( privateVariable );}

}())

init(); // trueconsole.log(privateVariable);//undefined

Page 30: Fondamentaux   portée - contexte - function ms tech days

Morales

1 Toujours utiliser var2 Utiliser le pattern module

Page 31: Fondamentaux   portée - contexte - function ms tech days

Contexte

this = contexte d'exécution

Page 32: Fondamentaux   portée - contexte - function ms tech days

Contexte

Démo « contexte »

Page 33: Fondamentaux   portée - contexte - function ms tech days

Contexte - DOMmyClass = function() {

this.id = 'myClass';this.getId = function() {

console.log(this.id);};

};

myObject = new myClass();document.body.onclick = myObject.getId;// document.body.id

Page 34: Fondamentaux   portée - contexte - function ms tech days

Contexte – fix portéemyClass = function() {

this.id = 'myClass';var me = this;this.getId = function() {

console.log(me.id);};

};myObject = myClass();

document.body.onclick = myObject.action;// 'myClass'

Page 35: Fondamentaux   portée - contexte - function ms tech days

Contexte – fix portée

Démo du fix

Page 36: Fondamentaux   portée - contexte - function ms tech days

Morales

1 Toujours utiliser var2 Utiliser le pattern module3 Verrouiller le contexte

Page 37: Fondamentaux   portée - contexte - function ms tech days

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

●action = function() {}

Page 38: Fondamentaux   portée - contexte - function ms tech days

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

●action = function() {}

●Exécution action();

Page 39: Fondamentaux   portée - contexte - function ms tech days

Function()

Un petit jeu ?

Page 40: Fondamentaux   portée - contexte - function ms tech days

function action()Le hoisting, c'est pratique

action(); // true

function action() { console.log(true);}

Page 41: Fondamentaux   portée - contexte - function ms tech days

function action()Le hoisting, c'est dangereuxif( 1 === 1) { function action() { console.log('1 === 1'); }} else { function action() { console.log('1 !== 1'); }}action(); // 1 !== 1

Page 42: Fondamentaux   portée - contexte - function ms tech days

function action()Implicitement sensible à la portée

(function() {function action() {

console.log('action');}

}())action(); // undefined

Page 43: Fondamentaux   portée - contexte - function ms tech days

var action = function()

Plus explicite donc moins dangereux

Page 44: Fondamentaux   portée - contexte - function ms tech days

Morales

1 Toujours utiliser var2 Utiliser le pattern module3 Verrouiller le contexte4 déclarer ses fonction avec var action = function() { }

Page 45: Fondamentaux   portée - contexte - function ms tech days

Avant la Démo « mise en pratique »

● Utilisation des écrasements de fonction

Page 46: Fondamentaux   portée - contexte - function ms tech days

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

Page 47: Fondamentaux   portée - contexte - function ms tech days

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); };}();

Page 48: Fondamentaux   portée - contexte - function ms tech days

Démo « mise en pratique »

Problème : écouter la liste d'éléments

Page 49: Fondamentaux   portée - contexte - function ms tech days

Teasing : 17h30 amphi Havane

OOJS, bonnes pratiques...

Page 50: Fondamentaux   portée - contexte - function ms tech days

Conclusion

Javascript est différent, apprenez le

Page 51: Fondamentaux   portée - contexte - function ms tech days

Questions ?Jean-pierre VINCENTbraincracking.org@theystolemynick

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