この記事では主にjsの再帰とタイマーの関連知識を紹介します。これには非常に優れた参照値があります。以下のエディターで見てみましょう
再帰: 関数がそれ自体を呼び出すときに形成されます。
まず、最後の例:
Function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } }
これは古典的な再帰階乗関数ですが、js で呼び出すといくつかのエラーが発生する可能性があります。 たとえば、次のコード
var anotherFactorial = factorial; factorial = null; alert(anotherFactorial)// 出错
上記のコードは、まず、変数 anotherFactory に要因() 関数を保存し、次に設定します。階乗変数を null にすると、元の関数への参照が 1 つだけ残ります。ただし、次に anotherFactioral() を呼び出すと、factorial 関数を実行する必要があり、factoial は関数ではなくなるため、この場合、arguments.callee を使用するとエラーが発生します。
arguments.callee は実行中の関数へのポインターであるため、関数への再帰呼び出しを実装するために使用できます。
例:
function factorial (num){ if(num){ return 1; }else{ return num*arguments.callee; } }
arguments.callee 利点:
1. 関数をどのように呼び出しても問題は発生しません。したがって、再帰関数を記述する場合は、関数名を使用するよりも、arguments.callee を使用する方が常に安全です
注: strict モードでは無効であり、エラーが報告されます
strict で記述するモード:
var factorial = (function f(){ if(num<1){ return 1; }else{ return num*f(num-1); } })
2. タイマーと組み合わせて使用する:
js はシングルスレッド言語ですが、タイムアウト呼び出しと間隔を設定することで、特定の瞬間にコードを実行できるようにスケジュール設定できます。前者は指定された時間の後にコードを実行し、後者は指定された時間ごとにコードを実行します。
パラメータ: 実行されるコードとミリ秒で表される時間
//不建议传字符串,传递字符串可能导致性能损失 setTimeout("alter('hello word')", 1000); //推荐方式 setTimeout(function(){ alter("Hello world"); },1000) setInterval(function(){ alter("Hello world"); },1000)
注:
timeout呼び出しを終了するコードはグローバルスコープで実行されるため、関数内のthisの値は厳密モードではウィンドウ オブジェクトを指しません。
実際のアプリケーションでは:
開発環境では、実際の断続呼び出しをシミュレートするのにタイムアウト呼び出しを使用するのが最適なモードです。前の断続的な通話の間に、後の断続的な通話が開始される可能性があるため、Called はほとんど使用されません。
var num = 0, max = 0; function incrrmentNumber{ num++; if(num < max){ setTimeout(incrrmentNumber,500); }else{ alert("Done"); } } setTimeout(incrrmentNumber,500);
上記のようなタイムアウト呼び出しを使用すると、これを回避できます。したがって、断続的な呼び出しは使用しないでください。
その他の JS 再帰およびタイマー インスタンス分析関連の記事については、PHP 中国語 Web サイトに注目してください。