Maison  >  Article  >  interface Web  >  Analyse approfondie des fonctions de rappel en js (partage d'explications détaillées)

Analyse approfondie des fonctions de rappel en js (partage d'explications détaillées)

奋力向前
奋力向前avant
2021-09-17 10:53:092172parcourir

Dans l'article précédent "Un article expliquant le problème de pointage this en js (avec code) ", je vous ai présenté le problème de pointage this en js. L'article suivant vous donnera une explication détaillée de la fonction de rappel dans js, jetez-y un oeil.

Analyse approfondie des fonctions de rappel en js (partage d'explications détaillées)

Explication détaillée de la fonction de rappel JS

Fonction de rappel JS

Qu'est-ce qu'une fonction de rappel officielle : lorsque le programme est en cours d'exécution, dans des circonstances normales, le programme d'application appelle souvent la bibliothèque via l'API ? fonctions préparées à l'avance. Cependant, certaines fonctions de la bibliothèque nécessitent que l'application lui transmette d'abord une fonction, afin qu'elle puisse être appelée au moment approprié pour terminer la tâche cible. La fonction transmise et appelée ultérieurement est appelée fonction de rappel.

Transmettez généralement une fonction B dans une autre fonction A et appelez la fonction A si nécessaire. B传入另一个函数A,并且在 需要的时候再调用函数A。

说白了,回调就是回溯,先定义好将要使用的函数体,然后在使用使再调用这个函数,我们通常把callback作为一个参数传入先定义的那个函数。下面我们先来看一段jquery代码:

$("p").hide(1000,function(){
alert("The paragraph is now hidden");
});

上面jquery就是一个回调函数,首先它在执行完hide效果后,接着调用function回调函数。

我们再来看一段JS代码,看看回调函数是如何实现的:

function Buy(name,goods1,callback) {
    alert(name+' buy '+goods1);
    if(callback&&typeof(callback)==="function")
        callback();
}
Buy('xiaoming','apple',function(){
    alert("shopping finish");
});

一个很简单的代码,一开始不知道要买啥,等到买到东西,立即把之前定义好的函数调用出来,最好加上判断规则,因为一切前提是callback必须是一个函数,输出结果为:

xiaoming buy apple
shopping finish

闭包与回调

下面看一道闭包的题目,分别点击第一个和第四个节点,执行结果:

var nodes = document.getElementsByTagName('button');
for (var i = 0; i < nodes.length; i++) {
    nodes[i].addEventListener(&#39;click&#39;, function() {
        console.log(&#39;You clicked element #&#39; + i);
   });
}

这里虽然主要考的是闭包,addEventListener是一个闭包,而匿名函数是一个回调函数,i是在闭包中的变量。在addEventListener的回调执行时,循环已经结束,此时的变量i被赋值为node.lengthnode.length为总节点数。所以结果就是

You clicked element # node.length

那要怎么改,将其返回值改成函数,既然i变量的值会被释放,那我们就引入i,让每次循环的值都保存在内存中,就可以了:

var nodes = document.getElementsByTagName(&#39;button&#39;);
for (var i = 0; i < nodes.length; i++) {
(function(i) {
    nodes[i].addEventListener(&#39;click&#39;, function () {
        console.log(&#39;You clicked element #&#39; + i);
        })
       })(i);
}

PHP回调函数

下面略说一下php中回调函数如何实现(结果为1,2,3,4):

<?php
    $array=array(1,2,3,4);
    array_walk($array,function($value){
        echo $value;});
?>

php对每个传入的数组元素作回调处理,下面再看看php的闭包,使用use

Pour parler franchement, le rappel est un traceback. Définissez d'abord le corps de la fonction à utiliser, puis appelez cette fonction après utilisation. Nous passons généralement callback comme paramètre dans la fonction définie en premier. Regardons d'abord un morceau de code jquery :

<?php
    function getcouter(){
        $i=0
        return function() use($i)(
            echo $i;
        )};
    }
    $counter=getcounter();
    echo $counter();
    echo $counter();
?>

Le jquery ci-dessus est une fonction de rappel. Tout d'abord, après avoir exécuté l'effet hide, il appelle ensuite la fonction . code> fonction de rappel. <p></p>Regardons à nouveau un morceau de code JS pour voir comment la fonction de rappel est implémentée : <p><pre class="brush:php;toolbar:false">1,1</pre></p>Un code très simple Je ne sais pas ce que je veux acheter au début. Quand j'achète quelque chose, j'appelle immédiatement. la fonction définie précédemment. Enfin, il est bon d'ajouter des règles de jugement, car le principe est que <code>callback doit être une fonction, et le résultat de sortie est :

class hello {
function callback($a,$b) {
echo "$a,$b";
}
static function callback($c,$d){
echo "$c,$d";        
}
}
//将类名作为参数
call_user_func(array(&#39;hello&#39;,&#39;callback&#39;),"hello","world");
//输出 hello,world
//将对象作为参数
call_user_func(array(new hello(),&#39;callback&#39;),"hello","world");
//将静态方法作为参数
call_user_func(hello::callback,"hello","world");
//输出 hello,world
Fermeture et rappel

🎜🎜Regardons. à une question sur la fermeture, cliquez respectivement sur le premier et le quatrième nœud, résultat de l'exécution : 🎜rrreee🎜Bien que le test principal ici soit la fermeture, addEventListener est une fermeture, et la fonction anonyme est un rappel fonction, i est dans la variable de fermeture. Lorsque le rappel de addEventListener est exécuté, la boucle est terminée. La variable i à ce moment se voit attribuer la valeur de node.length et node.length<.> est le numéro total du nœud. Le résultat est donc 🎜rrreee🎜Comment le changer ? Changer sa valeur de retour en fonction Puisque la valeur de la variable i sera publiée, alors nous introduirons <code>i pour que la valeur de chaque boucle. est enregistré en mémoire, c'est tout : 🎜rrreee🎜Fonction de rappel PHP🎜🎜 Parlons brièvement de la façon d'implémenter la fonction de rappel en PHP (les résultats sont 1, 2, 3, 4) : 🎜rrreee🎜php opère sur chaque tableau entrant element Pour le traitement des rappels, jetons un coup d'œil aux fermetures PHP. Utilisez le mot-clé use pour hériter des variables en dehors de la portée : 🎜rrreee🎜Le résultat renvoyé est : 🎜rrreee🎜Méthode d'utilisation officielle de PHP🎜rrreee🎜In. en fait, c'est juste le principe. On dit que JS et PHP sont similaires. Ils définissent d'abord des fonctions, puis les appellent en cas de besoin. 🎜🎜Apprentissage recommandé : 🎜Tutoriel vidéo JS🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer