前回の記事「jsのthisポインティング問題を解説した記事(コード付き)」では、jsのthisポインティング問題について紹介しました。次の記事では、js のコールバック関数について詳しく説明します。ぜひご覧ください。
JS コールバック関数
コールバック関数とは, 公式説明: プログラムの実行中、通常の状況では、アプリケーション プログラムは API を介してライブラリ内に事前に用意された関数を呼び出すことがよくあります。ただし、一部のライブラリ関数では、ターゲット タスクを完了する適切なタイミングで呼び出すことができるように、最初にアプリケーションに関数を渡す必要があります。渡されて後で呼び出される関数は、コールバック関数と呼ばれます。
通常は、関数B
を別の関数A
に渡し、必要に応じて関数 A を呼び出します。
端的に言うと、コールバックはバックトラックです。まず使用する関数本体を定義し、使用後にこの関数を呼び出します。通常、最初に定義した関数にcallback
をパラメータとして渡します。 関数。まずjquery
コードの一部を見てみましょう:
$("p").hide(1000,function(){ alert("The paragraph is now hidden"); });
上記の jquery はコールバック関数です。まず、hide
エフェクトを実行した後、関数
コールバック。
コールバック関数がどのように実装されているかを確認するために、もう一度 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
クロージャーとコールバック
クロージャーの質問を見てみましょう。最初と 4 番目のノードをそれぞれクリックします。実行結果は次のとおりです:
var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { nodes[i].addEventListener('click', function() { console.log('You clicked element #' + i); }); }
ここでのメイン テストはクロージャです。addEventListener
はクロージャ、匿名関数はコールバック関数です。i はクロージャ内の変数です。addEventListener
のコールバックが実行されるとループが終了し、このとき変数 i には値node.length
とnode.length
が代入されます。ノードの総数です。したがって、結果は
You clicked element # node.length
になります。変更方法は、i 変数の値が解放されるため、その戻り値を関数に変更します。次に、i
を導入します。各ループの値 すべてをメモリに保存するだけです:
var nodes = document.getElementsByTagName('button'); for (var i = 0; i < nodes.length; i++) { (function(i) { nodes[i].addEventListener('click', function () { console.log('You clicked element #' + i); }) })(i); }
PHP でコールバック関数を実装する方法について簡単に説明します (結果は 1、2、3、4 になります) ):
php は、受信する配列要素ごとにコールバック処理を実行します。PHP のクロージャーを見てみましょう。スコープ外の変数を継承するには、use
キーワードを使用します:
返される結果は次のとおりです:
1,1
公式の PHP 使用方法
class hello { function callback($a,$b) { echo "$a,$b"; } static function callback($c,$d){ echo "$c,$d"; } } //将类名作为参数 call_user_func(array('hello','callback'),"hello","world"); //输出 hello,world //将对象作为参数 call_user_func(array(new hello(),'callback'),"hello","world"); //将静态方法作为参数 call_user_func(hello::callback,"hello","world"); //输出 hello,world
実際、JS と PHP は原理的には似ており、どちらも最初に関数を定義し、必要に応じて呼び出します。
推奨学習:JS ビデオ チュートリアル
以上がjsのコールバック関数を徹底分析(詳細解説共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。