js再帰とタイマーの実例解析


再帰:関数は自身を呼び出した場合に構成されます。
最初の例:

Function factorial(num){
 if(num<=1){
 return 1;
 }else{
 return num*factorial(num-1);
 }
}
これは古典的な再帰的な階乗関数ですが、Jsではこのように呼び出されると、いくつかのエラーが発生する可能性があります。

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial)//   
上記のコードはまずfactoral関数を変数another Factorialに保存し、factoral変数をnullに設定した結果、元の関数への参照は一つしか残っていません。しかし、次にanother Factioralを呼び出すと、factorial関数を実行しなければならないので、factoalは関数ではないので、エラーが発生します。この場合、argments.caleeを使ってこの問題を解決できます。
argments.calleeは実行中の関数を指すポインタですので、関数の再帰的呼び出しを実現するために使用できます。
たとえば:

function factorial (num){
 if(num){
 return 1;
 }else{
 return num*arguments.callee;
 }
}
argments.calleeの長所:
1、どのように関数を呼び出しても問題がないことを確認できます。したがって、再帰関数を編纂する時、argments.calleeを使うのは関数名を使うよりずっと安全です。
注意点:厳格モードでは無効となり、エラーが発生します。
厳格なモードでの書き方:

var factorial = (function f(){
 if(num<1){
 return 1;
 }else{
 return num*f(num-1);
 }
})
二、タイマーとの結合使用:
jsは単一スレッド言語であるが、彼はタイムアウト呼び出しと間欠時間を設定することによってコードを特定の時刻にスケジュールすることができる。前者は指定された時間の後にコードを実行し、後者は指定された時間ごとにコードを実行します。
パラメータ:実行するコードと時間をミリ秒で表します。

//       ,              
setTimeout("alter('hello word')", 1000);
//    
setTimeout(function(){
 alter("Hello world");
},1000)
setInterval(function(){
 alter("Hello world");
},1000)
注意点:終了
タイムアウトコールのコードはすべてグローバルスコープで実行されます。したがって、関数のthisの値は非厳格モードでwindowオブジェクトを指し、厳密モードではundefinedです。
実際のアプリケーション:
超时调を使用して间欠呼び出しをシミュレートするのは最良のモードであり、开発环境では本当の间欠き呼出しはあまり使われない。なぜなら、后の间欠き呼出しは前の间欠き呼出しの间に起动する可能性があるからである。

var num = 0, max = 0;
function incrrmentNumber{
 num++;
 if(num < max){
 setTimeout(incrrmentNumber,500);
 }else{
 alert("Done");
 }
}
setTimeout(incrrmentNumber,500);
上記のようにタイムアウトコールを使うと、この点は避けられます。間欠コールは使用しないでください。
以上が本文の全部です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてくれると同時に、私達を応援してください。