4

私はjavascriptの初心者です。JavaScriptで再帰関数を試していました。

<html>
<head>
</head>
<body>
<script type = "text/javascript">
function first(){
    document.write(" first");
    first();
}
first();
</script>
</body>
</html>

ブラウザは、有限回数「最初」を出力します。何故ですか?特定の時間後に「最初に」印刷を停止する特定のメカニズムはありますか? ブラウザ固有ですか?

4

3 に答える 3

4

再帰関数は無限ではありません。スタック スペースがなくなるまでしか実行できません。

このコンテキストでの「スタック スペース」とは、プログラム (ブラウザなど) が関数呼び出しチェーンを記憶するために割り当てるメモリです。

そのメモリ スペースは限られているため、不足するとプログラムが停止し、エラー (スタック オーバーフロー エラー) がスローされます。

開発者ツール ウィンドウを備えたブラウザー (事実上すべての主要なブラウザー) を使用している場合、エラーが発生したときにコンソール ウィンドウにエラーが表示されるのを確認できるはずです。

ブラウザーがループを実行する正確な回数は、ブラウザーと、ブラウザーがスタックに割り当てたメモリの量によって異なります。これはあなたが直接制御できるものではありません - とにかくブラウザのコンテキストではありません。C/C++ プログラムなどの低レベルのプログラミングでは、スタック サイズを自分で定義するツールがありますが、ブラウザでは、これらのことは制御できません。とはいえ、ブラウザは、プログラムが無限ループに陥らない限りスタックにヒットしないように、十分なメモリをスタックに割り当てる必要があります。

于 2012-10-31T10:06:59.943 に答える
0

再帰関数はすべての言語で同様に機能します。returnステートメントを作成する必要があります。条件が真の場合は何かを返し、そうでない場合は関数を再度呼び出します。それはすべて要件、あなたがそれをどのように使いたいかによります。これはアルゴかもしれません。

function func_name(){
   if ( condition is true )
      return something
   ...
   ...
   ...
   func_name()
}
于 2012-10-31T10:09:04.147 に答える
0

この質問を確認してくださいJavaScript Infinite Loop? 回答のコードを使用してループを実現します。

window.onload = function start() {
slide();
}
function slide() {
var num = 0, style = document.getElementById('container').style;
window.setInterval(function () {
    // increase by num 1, reset to 0 at 4
    num = (num + 1) % 4;

    // -600 * 1 = -600, -600 * 2 = -1200, etc 
    style.marginLeft = (-600 * num) + "px"; 
}, 3000); // repeat forever, polling every 3 seconds
}
于 2012-10-31T10:07:50.820 に答える