JavaScriptにおける関数を返す関数

文字列を返す以下のような関数があるとします:

javascriptfunction func() {
  return '!';
}

let result = func();
console.log(result); // '!' を出力

次に、文字列の代わりに、同様の考え方で 無名関数を返してみましょう:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

let result = func(); // 変数resultには関数が入る
console.log(result); // 'function() {return '!';}' を出力

ご覧の通り、変数 result は 関数になりました。その実行結果をコンソールに 出力してみましょう。そのためには括弧を付けます:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

let result = func();
console.log( result() ); // '!' を出力

func() の呼び出しが関数を返すので、 この返された関数をすぐに呼び出すこともできます。 このように:func()() - 最初の括弧は 関数 func の結果(それ自体が関数)を取得し、 2番目の括弧は func の結果に適用されます。

試してみましょう:

javascriptfunction func() {
  return function() {
    return '!';
  };
}

console.log( func()() ); // '!' を出力
Задание 1

以下のように呼び出されたときに数値 1 を返す 関数 func1 を作成してください:func1()()。 同様に、数値 2 を返す関数 func2 も作成してください。 これらの関数の結果の合計を求めてください。