3

これらの 2 つのビットのどちらがより速く実行 (カウント) されますか?

var i = 0;
while(true){
    i++;
}

また

var i = 0;
inc = function(){
    i++;
    inc();
}

ループされたコード/関数が長くなると、推奨される方法は変わりますか?

4

2 に答える 2

7

再帰の終了条件がないため、これによりスタック オーバーフローが発生するだけです。

var i = 0;
inc = function(){
    i++;
    inc();
}

十分に優れているi場合、これは標準のループよりも速く失敗します。

より一般的には、ループよりも関数の呼び出しの方がオーバーヘッドが大きくなります。コードを再利用可能または読み取り可能にするのに役立つ場合は、関数を作成します。ループは高速です。

于 2012-08-20T11:32:13.787 に答える
4

反復回数が非常に少ない場合は、それほど重要ではありません。関数を呼び出すとオーバーヘッドが増えますが、短いループでは大きな違いはありません。

2 番目の方法は、スタック サイズによって制限されます。繰り返しが多すぎると、スタック スペースが不足してクラッシュします。

したがって、最初の方法はより高速に実行されますが、2 番目の方法は、速度が違いを生むのに十分な長さのループでクラッシュする大きなリスクがあるため、問題全体は意味がありません。

于 2012-08-20T11:32:02.583 に答える