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?
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
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
J'ai compris. Garder cela à l'esprit. 'ceci 'n'est pas si facile;) – dhawal