引数の戻り値をキャッシュする関数

アミット・クマー:

onceコールバックを入力として受け入れ、関数を返す関数を書きたいのですが返された関数が初めて呼び出されたとき、コールバックを呼び出してその出力を返す必要があります。それがさらに呼び出された場合、コールバックを再度呼び出す代わりに、最初に呼び出されたときの出力値を返します。

以下は私がやろうとしたことです。しかし、期待した結果が得られません。この概念を理解する必要があります。

function once(func) {
    let num; 
    function retFunc(x){
        num = func(x);
        return num;
    }
    return retFunc;
}

function addByTwo(input){
    return input + 2;
}

var onceFunc = once(addByTwo);

console.log(onceFunc(4));  //should log 6
console.log(onceFunc(10));  //should log 6
console.log(onceFunc(9001));  //should log 6
特定のパフォーマンス:

あなただけ割り当てる必要があるnum = func(x)ときnumであるundefined-の非常に最初の呼び出しで、ですretFunc

function once(func) {
  let num; 
  function retFunc(x){
    if (num === undefined) {
      num = func(x);
    }
    return num;
  }
  return retFunc;
}

function addByTwo(input){
  return input + 2;
}

var onceFunc = once(addByTwo);

console.log(onceFunc(4));  //should log 6
console.log(onceFunc(10));  //should log 6
console.log(onceFunc(9001));  //should log 6

どのような場合は渡された関数( -しかし、これは保証され、一般的な解決策ではありませんaddByTwoあなたの例では)結果undefined呼び出されたとき?その後、=== undefinedチェックは機能しません。したがって、フラグなどを設定し、コールバックが最初に呼び出されたときにそのフラグを再割り当てすることをお勧めします。

function once(func) {
  let num;
  let done = false;
  function retFunc(x){
    if (!done) {
      done = true;
      num = func(x);
    }
    return num;
  }
  return retFunc;
}

function returnsUndefinedOn1(input){
  return input === 1 ? undefined : input;
}

var onceFunc = once(returnsUndefinedOn1);

console.log(onceFunc(1));
console.log(onceFunc(10));
console.log(onceFunc(9001));

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

単一のクエリの関数の戻り値をキャッシュする方法

分類Dev

jqueryajax関数の戻り値を別の変数でキャッチする方法

分類Dev

引数の型に基づいて関数の戻り値の型をキャストする方法は?

分類Dev

シーケンスの値をキャッシュする関数

分類Dev

関数ポインタをvoid関数にキャストしてから呼び出すことにより、戻り値を「トラッシュ」するのは未定義の動作ですか?

分類Dev

関数のキャッシュされた値をPythonの関数の属性として格納する

分類Dev

戻り値のプロシージャ/関数VHDLを無視する

分類Dev

関数の結果をキャッシュする

分類Dev

Haskellで関数の結果をキャッシュする

分類Dev

関数の結果をscalaにキャッシュする方法

分類Dev

関数から複数の戻り値をキャプチャして初期化する簡単な方法

分類Dev

関数の戻り値を延期する

分類Dev

関数の戻り値を理解する

分類Dev

関数の戻り値を理解する

分類Dev

関数の戻り値を理解する

分類Dev

関数の引数と戻り値なしでRPCを定義する

分類Dev

関数の引数と戻り値を削除します

分類Dev

Nimで異なる引数を使用して関数をキャッシュする方法は?

分類Dev

ハッシュ関数はヘキサ値ではなく戻ります

分類Dev

do後のメソッドの戻り値と引数に関する質問

分類Dev

c++ で、ある関数の戻り値を別の関数の引数として使用する

分類Dev

このハッシュ関数の後で元の値を取り戻す方法はありますか?

分類Dev

whileループ条件で関数の戻り値に割り当て、途中で例外をキャッチします

分類Dev

TypeScript:関数の引数の型に基づいて関数の戻り値の型を設定する方法

分類Dev

戻り値と非戻り値のstd ::関数がキャスト可能であるのはなぜですか?

分類Dev

引数のサブセットのみを識別子として使用してPython関数の結果をキャッシュする

分類Dev

関数の結果をelmにキャッシュする方法はありますか?

分類Dev

Rの関数から警告をキャッチし、それでも戻り値を取得しますか?

分類Dev

ネストされた関数の戻り値を親関数の引数と比較する

Related 関連記事

  1. 1

    単一のクエリの関数の戻り値をキャッシュする方法

  2. 2

    jqueryajax関数の戻り値を別の変数でキャッチする方法

  3. 3

    引数の型に基づいて関数の戻り値の型をキャストする方法は?

  4. 4

    シーケンスの値をキャッシュする関数

  5. 5

    関数ポインタをvoid関数にキャストしてから呼び出すことにより、戻り値を「トラッシュ」するのは未定義の動作ですか?

  6. 6

    関数のキャッシュされた値をPythonの関数の属性として格納する

  7. 7

    戻り値のプロシージャ/関数VHDLを無視する

  8. 8

    関数の結果をキャッシュする

  9. 9

    Haskellで関数の結果をキャッシュする

  10. 10

    関数の結果をscalaにキャッシュする方法

  11. 11

    関数から複数の戻り値をキャプチャして初期化する簡単な方法

  12. 12

    関数の戻り値を延期する

  13. 13

    関数の戻り値を理解する

  14. 14

    関数の戻り値を理解する

  15. 15

    関数の戻り値を理解する

  16. 16

    関数の引数と戻り値なしでRPCを定義する

  17. 17

    関数の引数と戻り値を削除します

  18. 18

    Nimで異なる引数を使用して関数をキャッシュする方法は?

  19. 19

    ハッシュ関数はヘキサ値ではなく戻ります

  20. 20

    do後のメソッドの戻り値と引数に関する質問

  21. 21

    c++ で、ある関数の戻り値を別の関数の引数として使用する

  22. 22

    このハッシュ関数の後で元の値を取り戻す方法はありますか?

  23. 23

    whileループ条件で関数の戻り値に割り当て、途中で例外をキャッチします

  24. 24

    TypeScript:関数の引数の型に基づいて関数の戻り値の型を設定する方法

  25. 25

    戻り値と非戻り値のstd ::関数がキャスト可能であるのはなぜですか?

  26. 26

    引数のサブセットのみを識別子として使用してPython関数の結果をキャッシュする

  27. 27

    関数の結果をelmにキャッシュする方法はありますか?

  28. 28

    Rの関数から警告をキャッチし、それでも戻り値を取得しますか?

  29. 29

    ネストされた関数の戻り値を親関数の引数と比較する

ホットタグ

アーカイブ