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 ?
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 ?
我想大声告诉你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
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
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. . 🎜