Vous devez être prudent avec le deuxième exemple, le mot-clé this
se référera à l'objet global si vous appelez la fonction sans l'opérateur new
, et en regardant votre valeur de retour, semble que vous n'essaient pas de faire un constructor function.
Je pense que vous devez savoir comment le mot-clé this
(le contexte de la fonction) fonctionne:
Le mot-clé this
est implicitement ensemble lorsque:
1- Lorsqu'une fonction est appelée en tant que méthode (la fonction est invoquée en tant que membre d'un objet):
obj.method(); // 'this' inside method will refer to obj
2- un appel de fonction normale:
myFunction(); // 'this' inside the function will refer to the Global object
// or
(function() {})();
3- Lorsque l'opérateur new
est utilisé:
var obj = new MyObj(); // this will refer to a newly created object.
Et vous pouvez également définir le mot-clé this
explicitement, avec les call
et apply
méthodes:
function test() {
alert(this);
}
test.call("Hello world"); // alerts 'Hello world'
Maintenant, la différence entre la fonction b
de vos deux exemples, est fondamentalement que dans le premier extrait, b
est une déclaration de fonction , dans votre deuxième exemple b
est une expression de fonction.
Les déclarations de fonction sont soumises à hoisting et elles sont évaluées au moment de l'analyse, les expressions de fonction sont définies au moment de l'exécution.
Si vous voulez plus de détails sur les différences entre les déclarations de fonction et les expressions de la fonction, je vous laisse quelques ressources:
Et BTW, vous n'avez pas besoin le semicolon after function declarations.