recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Une question à ce sujet en JS

var length = 10;

function cl() {
    console.log(this.length);
}

var o = {
    length: 20,
    show: function (fn) {
        fn();
        arguments[0]();
    }
}

o.show(cl); // 10 

Concernant cette question, je veux savoir si cela en js ne pointe pas vers celui qui l'appelle ? Pourquoi this in cl pointe-t-il toujours vers window au lieu de o object lorsqu'il est appelé pour la première fois ? Je sais que c'est inutilecallC'est probablement faux, mais pourquoi est-ce faux ?
Pourquoi le second pointe-t-il des arguments ?

En même temps, pourquoi la première sortie de ce code lors de son exécution dans nodejs n'est-elle pas modifiée ?

为情所困为情所困2703 Il y a quelques jours969

répondre à tous(5)je répondrai

  • 巴扎黑

    巴扎黑2017-07-05 10:39:50

    1. Appelez directement en utilisant le nom de la fonction. Peu importe le nombre de couches que vous enveloppez, l'appelant est window.

    2. Parce que l'opérateur crochet, l'opérateur crochet est une opération de valeur d'objet, dans un sens, il peut être égal au point .运算符的,所以这里在形式上其实可以类比成arguments.0(),你看,这不就是arguments来调用了这个函数了嘛,所以运行的时候this pointant vers lui.

    répondre
    0
  • 欧阳克

    欧阳克2017-07-05 10:39:50

    L'intérêt de ceci n'est pas déterminé lors de sa déclaration mais est défini lors de son appel. Il existe plusieurs situations

    .
    1. Appel de fonction ordinaire, c'est l'objet global ou indéfini

    2. En tant que méthode d'un objet, c'est cet objet

    3. nouvelle expression, c'est l'objet nouvellement créé prototypé avec cette fonction

    4. Utilisez apply/call pour spécifier ceci

    5. Utilisez bind pour résoudre ce problème

    6. Dans la fonction de gestion des événements, il s'agit de l'élément DOM actuel qui déclenche l'événement (event.currentTarget)

    Je ne sais pas si cela va t'aider

    répondre
    0
  • 扔个三星炸死你

    扔个三星炸死你2017-07-05 10:39:50

    En ce qui concerne cette question.

    1. o.show() est exécuté, puis celui-ci utilisé dans la portée de la fonction show pointe vers o.
      Mais en fait, fn() est appelé à l'intérieur, fn n'est pas appelé par o, il n'y a pas de o.fn... Un principe relativement simple est que celui qui se trouve devant le point d'appel de fonction sera celui-ci dans la fonction. Ce doit être la fenêtre par défaut.

    2. arguments[0] ==> arguments.0
      Les tableaux sont aussi des objets, et les appels [] sont les mêmes que ., ce sont donc des arguments

    3. Concernant node, car il est modulaire, cela pointe vers global, et lorsque var est déclaré, il n'y a pas d'appel de fenêtre comme dans le navigateur. Il n’existe pas de mécanisme de ce type dans node.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-07-05 10:39:50

    o.show(cl) ==>相当于 
    o.show(function(){
    console.log(this)  //windows
    });

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你2017-07-05 10:39:50

    o.show()this指向o,但和本题无关。
    o.show()中的fn标识符解析得到一个引用类型(内部类型),其base属性(本题中值为show()方法的活动对象)即是this的指向。因为活动对象返回null,所以this指向null,从而指向了window
    arguments[0]()arguments[0]同样返回一个引用类型,其base属性的值为arguments,所以this指向arguments

    répondre
    0
  • Annulerrépondre