2016-10-21 2 views
0

私はJavascriptの初心者ですが、少し問題があります。宿題には問題がありますが、それは完了だけに基づいて評価されるので、私は自分のために正しい答えを見つけようとしています。Javascriptで関数から値を取得する

私は、repeatUntilという関数を定義することになっています。これは、2つの関数、つまりf(数値を返します)とg(ブール値を返します)を取ります。 repeatUntilの機能は、gがtrueを返すまで関数fを少なくとも1回繰り返すことです。ここで

は、私がこれまで持っているものです。

var print = console.log; 
var r = repeatUntil(function(x) { return x + x }, function(x) { return x >= 20 }) 
print(r(2)) 
print("Expected: 32") 

機能が動作しますが、私の問題は今、更新を記憶している。

function repeatUntil(f, cond) { 
    var f1; 

    do{ 
    f1 = f; 
    return f1; 
    } 
    while(cond(f1())); 
} 

そしてここでは、我々はそれを呼び出す方法をテスター/ありますrepeatUntil関数からのxの値。現在、関数は1回だけ実行され、関数gにxの更新された値を渡すことができないため、条件は更新されません。私はf()の結果を変数に入れようとしましたが、数値ではなく関数だけを返します。

ご迷惑をおかけして申し訳ございません。ありがとうございました!

+1

の身体に戻るので、doループが正確に一度だけ実行されますループはコード内で最も明白なエラーです。一度修正すると別の問題が発生します –

+0

r()を呼び出す必要があるため、関数は別の関数を返す必要があります –

+0

@JaromandaXループを終了した後、 、条件が更新されていないので今私に無限ループを与えている。 – Riadiani

答えて

0

既存のコメントを回答にまとめます。

  • r()に電話する必要があるため、関数は別の関数を返す必要があります。
  • あなたはループが体の中にあなた `return`ので、一度だけ実行されますループ

コード

function repeatUntil(f, cond) { 
    return function() { 
     while(cond(f())); 
    } 
} 
+0

しかし、fの更新値はどこで使用されていますか? – Riadiani

+0

コンディションに合格 –

+0

ありがとう@Juan Mendes!返された関数から欠落していたものは、各計算(fが評価されるたびに変化し続けるx)でfが使用する数を処理するパラメータであることが判明しました。 – Riadiani

関連する問題