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

Quelle est la différence entre affecter directement une fonction à une variable et référencer une fonction ?

Quelle est la différence entre affecter directement une fonction à une variable et référencer une fonction ?

Par exemple : Fragment 1 et Fragment 2

Extrait 1

function fn(){
  var box = document.getElementById("box");
  box.onclick = function(){
      console.log(111);
  };
  box = null;
}

Extrait 2

function fn(){
  var box = document.getElementById("box");
  box.onclick = click;
}

function click(){
  console.log(111);
}

La fonction onclick dans le fragment 1 permet d'accéder aux variables dans fn, mais la fonction onclick dans le fragment 2 ne permet pas d'accéder aux variables dans fn. C'est ce que je pense, car le clic dans le fragment 2 est défini en dehors de fn. fn n'est pas accessible, ce qui signifie que l'affectation à onclick dans le fragment 2 est en fait une référence plutôt qu'une copie ?

大家讲道理大家讲道理2709 Il y a quelques jours489

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

  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:35:08

    Non, non, vous n'appelez pas de méthode ni ne transmettez de paramètres, donc le cœur de ces deux exemples n'est pas un problème de référence/copie

    Il s'agit d'un problème de portée (chaîne de prototypes)

    Les variables ont des droits d'accès différents selon les étendues :
    La portée enfant peut accéder à la portée parent
    La portée parent ne peut pas accéder à la portée enfant
    Les étendues du même niveau ne peuvent pas accéder les unes aux autres

    répondre
    0
  • PHPz

    PHPz2017-05-19 10:35:08

    Je suppose que vous devrez peut-être en savoir plus sur la portée des variables. La portée de js est déjà déterminée lorsqu'elle est définie.

    Extrait 1

    function fn(){
      var box = document.getElementById("box");
      box.onclick = function(){
          console.log(111);
      };
      box = null;
    }

    Le rappel onclick lié ​​à la boîte se trouve à l'intérieur de la fonction fn, donc toutes les variables locales qu'elle contient sont accessibles par le rappel. onclick回调,是在fn的函数内部,因此其内部所有局部变量都能被该回调访问到。

    片段2中

    function fn(){
      var box = document.getElementById("box");
      box.onclick = click;
    }
    
    function click(){
      console.log(111);
    }

    click方法在fn函数外部,与之同级,由于定义时,click

    Extrait 2🎜 rrreee 🎜La méthode click est en dehors de la fonction fn et est au même niveau qu'elle. Puisque click n'est pas encore à l'intérieur de fn lorsqu'il est défini, sa portée interne n'est pas accessible. . 🎜

    répondre
    0
  • Annulerrépondre