2017-10-05 4 views
1

Je suis tombé sur un exemple Javascript mais pas tout à fait satisfait de la justification ou plutôt confus sur la portée de la fonction interne this. Voir l'exemple ci-dessous:Pourquoi la sortie est 2 pendant le second appel de fonction fn?

var length = 10; 
function fn() { 
    console.log(this.length); 
} 

var obj = { 
    length: 5, 
    method: function(fn) { 
    fn(); 
    arguments[0](); 
    } 
}; 

obj.method(fn, 1); 

première fois 10 est enregistré ce qui est compréhensible, car il est appelé de portée mondiale. Cependant la deuxième fois 2 est enregistrée qui sorte de me confondre. Je cherche une réponse et voici ce que je suis -

Nous savons que nous pouvons accéder à un certain nombre d'arguments dans une fonction JavaScript en utilisant les arguments de tableau [].

Par conséquent arguments0 n'est rien d'autre que d'appeler fn(). A l'intérieur fn maintenant, la portée de cette fonction devient le tableau d'arguments, et en vous connectant la longueur des arguments [] retournera 2

Est-ce que quelqu'un a une meilleure réponse à cette question?

Répondre

0

Vous appelez arguments[0]();

La valeur de this est donc le même que arguments.

Les arguments sont les suivants: fn, 1

Il y a 2 d'entre eux.

arguments.length est donc 2.

+0

Cela signifie-t-il que tout ce qui compte est l'appelant de la fonction et non l'étendue/bloc où il est appelé? – dhawal

+1

Dans ce cas. Oui. Scope n'a rien à voir avec la valeur de 'this' (enfin, sauf si vous utilisez des fonctions flèches qui copient la valeur de' this' de la portée dans laquelle elles sont créées). – Quentin

+0

J'ai compris. Garder cela à l'esprit. 'ceci 'n'est pas si facile;) – dhawal