2016-08-27 7 views
-2
if(bool === true) { 
    bool = false 
} 
if (bool === false) { 
    bool = true 
} 

2番目のIfステートメントでは、最初のifステートメントをもう一度実行し、次に2番目のステートメントを実行したいと思います。はい、これは無限ループを作成することを知っていますそれをコメントしないでください。ifステートメントを別のものから呼び出す

+2

'function'であり、何をするかを見てみましょう。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions –

+0

あなたはステートメントを呼び出すことはできません。 [[Call]]内部メソッドでのみオブジェクトを呼び出すことができます。 – Oriol

答えて

0

は、あなたがこれをしたいと思う理由IDKけど:

function swap(bool){ 
    return swap(!bool); 
} 

またはこの

var bool = true; 

function swap(){ 
    bool = !bool; 
    swap(); 
} 

しかし、あなたはおそらく流れか何かの上にスタックを取得するつもりです。アニメーションのために、このループをやろうとしている場合は設定されたタイムアウトやリクエストアニメーションフレームを使用して、コールバック関数内でアニメーションを行い、その後、

function swap(){ 
    if(/*some condition*/) 
     return; 
    bool = !bool; 
    swap(); 
} 

:あなたが再帰をやろうとしている場合は、次のような基本ケースが必要です。

+0

再帰については、テールコール最適化を使用するとよいでしょう。 2番目と3番目の関数の場合、 'swap()'の代わりに 'return swap()'で終わるべきです。それを書いている間、私は最初の機能がすでにそれをしていることに気づいた。 (^_^)理論的には、それは最初の呼び出しからのメモリを再利用するので、永遠に進むことができます。 TCOはEC6の新機能ですが、古いブラウザでは何も破壊してはいけません。 – Seb

+0

私はそれがあなたが何をしようとしているのかによると思います。あなたが値を操作しているなら、確かに返品交換が必要です。 – brianxautumn

+0

それ自体の中で関数を呼び出すことと同じように値を操作することはあまりありません。それを呼び出すだけではなく、関数が返って終了すると、TCOが起動します。これはスタックのオーバーフローを防ぎます。 – Seb

0

私はこれがあなたが望むことをすると思います。再帰とJavaScriptチュートリアルを調べることをお勧めします。

function checkBool(boolVal) { 
    if (boolVal === true) { 
     boolVal = false; 
    } 

    if (boolVal === false) { 
     boolVal = true; 
     checkBool(boolVal); 
    } 
} 
関連する問題