JavaScriptにおけるネストされた関数

2つの数値をパラメータとして受け取り、 それらの数値の二乗和を返す関数があるとします:

javascriptfunction func(num1, num2) {
  return num1 * num1 + num2 * num2;
}

console.log(func(2, 3)); // 13を出力します(結果は 2 * 2 + 3 * 3)

二乗する処理をヘルパー関数 square に切り出してみましょう:

javascriptfunction square(num) {
  return num * num;
}

function func(num1, num2) {
  return square(num1) + square(num2);
}

console.log(func(2, 3)); // 13を出力します

関数 square は関数 func 内でのみ使用され、それ以外では決して使用されないと確信しているとします。

この場合、誰も(あなた自身や一緒に作業している他のプログラマーも) 誤って使用できないようにすると便利です。

JavaScriptにはエレガントな解決策があります: ヘルパー関数 square を func の内部に配置することができます。この場合、 ヘルパー関数は func 内部でのみアクセス可能になり、 外部からはアクセスできなくなります。

これを実装してみましょう:

javascriptfunction func(num1, num2) {
  function square(num) {
    return num * num;
  }
  
  return square(num1) + square(num2);
}

console.log(func(2, 3)); // 13を出力します

func の外部から square を呼び出そうとすると、 エラーが発生します:

javascriptfunction func(num1, num2) {
  function square(num) {
    return num * num;
  }
  
  return square(num1) + square(num2);
}

console.log(square(2)); //!! エラーが発生します
Задание 1

2つの数値をパラメータとして受け取り、 1番目の数値の二乗と2番目の数値の三乗の和を返す関数 func を作成してください。 そのために、数値を二乗するヘルパー関数 square と、 数値を三乗するヘルパー関数 cube を作成してください。