コールバック関数とは何ですか? JSコールバック関数を学習する前に、JSコールバック機能を使用して機能させる方法が本当にわかりません。次の記事では、学生に学習コールバック関数の例を紹介します。知っておく必要がある学生は、参照を入力しないように注意すべきではありません。
コールバック関数の原則:
私は今出発します、そして私はあなたに通知します。」
これは非同期プロセスです。 「私は行く」(関数の実行)のプロセス中に、「あなたは何でもすることができ、「到着する」(関数の実行が完了します)、「通知」(コールバック)のプロセス(コールバック)が実行された後、「コールバック)が実行されます
例
1。基本的な方法
<スクリプト言語= "javascript" type = "text/javascript"> function dosomething(callback){//…// callbackcallback( 'fist'、 'goes'、 'here');} function foo(a、b、c){// callbackalert(a + "" + b + " + c); </script>または匿名関数を使用します
<スクリプト言語= "javascript" type = "text/javascript"> function dosomething(damsg、callback){alert(damsg); if(typeof callback == "function")callback(); } dosomething( "callback function"、function(){alert( "jquery callbacks form!");}); </script>2。高度な方法
JavaScriptを使用してメソッドを呼び出します
<スクリプト言語= "javascript" type = "text/javascript"> function thing(name){this.name = name;} thing.prototype.dosomething = function(callback){// callbackを呼び出しますが、contextcallback.call(this);} function foo(){alert(this name); Thing( 'Joe'); t.Dosomething(foo); //「foo」</script>を介して「Joe」をアラートしますパスパラメーター
<スクリプト言語= "javascript" type = "text/javascript"> function thing(name){this.name = name;} prototype.dosomething = function(callback、allution){//コールバックを呼び出しますが、Contextcallback.callとして独自のインスタンスを使用します(this、namutation); = new Thing( 'Joe'); t.dosomething(foo、 'hi'); //「foo」</script>を介して「Hi Joe」をアラートしますJavaScriptを使用してパラメーターを渡します
<スクリプト言語= "javascript" type = "text/javascript"> function thing(name){this.name = name;} prototype.dosomething = function(callback){//コールバックを呼び出しますが、contextcallback.applyとして独自のインスタンスを使用します(this ['hi'、3、2、2、1]; " + this.name +" " + three +" " + two +" " + one);} var t = new Thing( 'joe'); t.dosomething(foo); // `foo` </script>を介して「こんにちはジョー3 2 1」をアラートします例
//提供されたデータソースが整数であり、これは学生のスコアであり、num <= 0の場合、基礎となる層によって処理され、n> 0の場合、上層によって処理されます。
//次の関数をコピーして、1.jsに保存します
function f(num、callback){if(num <0){alert( "低レベルの関数を処理するためにコール!"); alert( "スコアは負にすることはできません、入力エラー!"); } else if(num == 0){alert( "低レベル関数を処理するためにコール!");アラート(「学生は試験を受けていないかもしれません!」); } else {alert( "Process!");折り返し電話(); }}// 1.jsと同じディレクトリに次のtest.htmlファイルを保存します。
<!doctype html public " - // w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <head> <meta http- equiv = "content-type" = "/html; charset = gb2312 "> <script src =" 1.js "type =" text/javascript "> </script> <title> unt titled document </title> <script type =" text/javascript "> function test(){var p = document.getelementbyid(" pp "); pp.innertext = ""; var num = document.getElementById( "score")。value; f(num、function(){//匿名ハイレベル処理関数if(num <60)alert( "failed!"); else(num <= 90)alert( "Excrect Result!"); else alert( "Excrect Result!");})pp.innertext = "1978 QQ558064!" } </script> </head> <body> <p>コールバック関数の例:生徒がスコアを<= 0ポイント<= 0ポイントで、最下層がそれを処理します。スコア> 0の場合、最上層がそれを処理します。 </p>学生スコアを入力してください以下は、他のネチズンからの追加です。
JavaScriptのコールバックモード:
示されているように:
function writecode(callback){//いくつかのことを実行する、callback(); // ...} function intrducebugs(){//..... introduce脆弱性} writecode(intrducebugs);writecode()に関数の適用を渡すため、Writecodeは適切な時期に実行されます(後で電話をかけるために返送してください)
まず、あまり良くない例を見てみましょう(後でリファクタリングされます):
//検索ページのDOMノードをシミュレートし、配列内の見つかったノードを均一に返しますwhile(i){i - = 1; nodes.push(found); }ノードを返します。 } //すべてのDOMノードを非表示var hide = function(nodes){var i = 0、max = nodes.length; for(; i <max; i ++){//すぐに実行を示すためにノードを見つけた後、括弧があります。最初にfindNodes()を実行してから、hide()<hid(findNodes());を実行します。機能を実行}; nodes [i] .style.display = "none"}上記の方法は非効率的です。 hide()は、findnodes()によって返された配列ノードを再度通過する必要があると考えられています。このような不要なループを避ける方法。 FindNodesのクエリノードを直接非表示にすることはできません(この検索は論理カップリングを変更できます)ため、一般的な機能ではなくなりました。解決策は、コールバックモードを使用することです。そこでは、ノードの非表示ロジックを渡してコールバック関数でfindNodes()を渡し、それを委任して//リファクタリングfindNodesを委任してコールバック関数var fundNodes = fucntion(callback){var i = 100000、nodes = []、fund; //コールバック関数がコールバックで使用可能であるかどうかを確認します(typeof callback!== 'function'){callback = false; } while(i){i - = 1; if(callback){callback(exped); } nodes.push(fund); }ノードを返します。 } //チェックバック関数var hide = function(node){node.style.display = 'none'; } //後続のノードを見つけて、後続の実行findNodes(非表示)で非表示にします; // findNodesを最初に実行してから非表示にしますもちろん、メイン関数を呼び出すときにコールバック関数を作成することもできます:findNodes(function(node){node.style.display = 'none';});