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

高洛峰
リリース: 2017-02-08 15:22:07
オリジナル
1645 人が閲覧しました

この記事では主に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(&#39;hello word&#39;)", 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 サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート