Quelle est la différence entre affecter directement une fonction à une variable et référencer une fonction ?
大家讲道理
大家讲道理 2017-05-19 10:33:08
0
2
546

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 ?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(2)
我想大声告诉你

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

PHPzhong

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. . 🎜
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal