2017-10-11 10 views
0

J'examine un code du livre de Kyle Simpson "Vous ne connaissez pas JS: ce & Object Prototypes" et collé sur un exemple de code, qui est écrit ci-dessous.JavaScript javascript paramètres avec la méthode .bind()

Quelqu'un peut-il expliquer en clair comment bar variable après l'exécution var bar = foo.bind(null, 2); morceau de code enregistre "un" paramètre en tant que 2 et où il conserve ce paramètre enregistré, et pourquoi les paramètres ne sont pas remplacés lorsque le code bar(3); s'exécute?

function foo(a, b) { 
 
    console.log(a, b); 
 
    console.log("a:" + a + ", b:" + b); 
 
} 
 

 
foo.apply(null, [1, 10]); 
 

 
var bar = foo.bind(null, 2); 
 
bar(3);

+3

Il est dans la définition de 'bind': * La méthode' bind() 'crée une nouvelle fonction qui, lorsqu'elle est appelée , a son mot-clé 'this' mis à la valeur fournie, avec une séquence donnée de ** arguments précédant tout fourni lors de l'appel de la nouvelle fonction. *** C'est simplement ce qu'il fait. Comment cela fonctionne-t-il en interne? – deceze

+0

Lors du débogage, j'ai découvert que je pouvais accéder aux paramètres de la barre via des prototypes en exécutant le code 'bar.call ('BoundArgs')'. – tawreon

+0

Pouvez-vous démontrer exactement quel est le résultat et comment vous pouvez "accéder" aux paramètres de cette façon? – deceze

Répondre

0

Vous pouvez également ajouter des paramètres supplémentaires après le 1er paramètre (ce) et bind passera dans ces valeurs à la fonction d'origine. Tous les paramètres supplémentaires que vous passerez plus tard à la fonction liée seront transmis après les paramètres liés.

Ainsi, en cas de votre exemple:

function foo(a, b) { 
    console.log(a, b); 
    console.log("a:" + a + ", b:" + b); 
} 

var bar = foo.bind(null, 2); 

Ici, nous avons seulement passé un paramètre après this paramètre de référence et qui est pour a. Si vous l'appelez comme ceci:

bar();// here a is 2 and b is undefined(no parameter passed). 

bar(3);// a is 2 and b is 3 

bar(3); est équivalent à:

foo.bind(null, 2, 3); 
bar(); 
+0

Veuillez commenter pour indiquer si vous pensez que la réponse est incorrecte. Je ne comprends pas mon erreur avec cette downvote –