vendredi 29 octobre 2010
J'ai aussi échoué la deuxième question du quiz JavaScript avancé. La question était la suivante : dans l'exemple suivant, qu'affichera typeof ?
var f = function g(){ return 23; };Choix de réponse :
typeof g();
- number
- undefined
- function
- error
Erreur. Parce que la fonction est assignée à la variable, g est contenu dans f mais ne semble pas reconnu dans la portée globale :
console.log( f ); // g()Sauf si on procédait ainsi :
console.log( f() ); // 23
console.log( g() ); // g is not defined
function g(){ return 23; }Ici, typeof g() retournerait un nombre mais dans le contexte du piège, g() n'est pas défini. La réponse undefined semble alors évidente. Faux.
console.log( typeof g ); // function
console.log( typeof g() ); // number
console.log( g() == undefined ? true : false ); // g is not definedAutrement dit, "is not defined" lancé par Firebug n'équivaut pas à "undefined". Ce serait indéfini dans le cas où une variable ne serait pas initialisée (si la fonction g() n'est pas assignée à f).
var f;La bonne réponse était : typeof g() provoque une erreur.
console.log(f); // undefined