2013-10-03 7 views
1

Quelle est la différence entrevar = nomVar FUNCNAME function() {}

var a = function() {} 

et

var a = function b() {} 

Ce dernier, b est définie?

+0

@iJay: non, ce n'est pas faux –

+0

Ce dernier aura une propriété 'name',' a.name === 'b'' –

+0

Dans ce dernier, b est défini uniquement dans la fonction mais doit être indéfini à l'extérieur il. Le but est de permettre aux fonctions anonymes de se reproduire. Le plus ancien Mozilla ou IE (ne me souviens pas) avait un bug où b n'est pas indéfini en dehors de la fonction - mais la chose récursive fonctionnait encore. – slebetman

Répondre

4

Le second est un named anonymous function - le nom apparaîtra dans un stacktrace (sinon dans le stacktrace you''ll voir juste « fonction anonyme »)

+1

Techniquement, il est appelé un expression de fonction nommée. Il est utilisé pour implémenter des fonctions anonymes récursives puisque vous n'êtes plus autorisé à utiliser arguments.callee en mode strict html5 – slebetman

+0

@Darhazer: Merci! Ce dernier retournera "b" si j'imprime a.name. –

+0

@slebetman: peut-être que vous pensez au mode strict de Javascript, pas html. –

4

La première est une expression de fonction anonyme et le second a nommé expression de fonction, les deux valides en Javascript.

Par exemple, il peut être utilisé pour la récursivité sans arguments.callee (déconseillé et non autorisé en mode strict), car il se réfère à lui-même, peu importe où. La portée de la référence est uniquement locale à l'intérieur de la fonction, qui est non accessible à l'échelle mondiale:

var a = function b(){ 
    return b; 
}; 
function c() { 
    return c; 
} 
var d = function e() { 
    return e(); 
}; 
d(); // maximum call stack size exceeded :P 
var f = c; 
c = null; 
f(); // null 
a(); // function 
b();// undefined not a function 
b; // not defined 
a()(); // same function again 
+1

Encore une chose que vous avez oubliée de votre exemple: 'a()()' qui appelle le "b" retourné (qui dans ce cas est lui-même donc c'est juste un peu stupide, mais néanmoins informatif) – slebetman

1
var a = function() {} 

Nom de la fonction peut être omise. Dans ce cas, le nom de la fonction est omis. Ces fonctions sont appelées fonctions anonymes.

Informez-vous sur les avantages et les inconvénients de la fonction étendue et de la fonction anonyme pour plus de détails.

Questions connexes