Как получить значения из внутренней функции - PullRequest
3 голосов
/ 12 июня 2019

Мне нужно получить значения (arr, sum) из внутренней функции fn. я пытаюсь вставить его в массив результатов во внешней функции или попытаться присвоить его следующим образом: a = fn () ;, нет. Что я делаю неправильно и как мне получить эти значения во внешней функции?

    function func(limit) {
      let results = [];
      let arr = [];

      console.log(limit);
      function fn() {
        let arg = arguments;
        let sum = 0;
        for (let i = 0; i < arg.length; i++) {
          sum += arg[i];
          arr.push(arg[i]);
        };
        fn();
        console.log(arr, sum);
        results.push({args: arr, result: sum});
        return sum;
      };
      fn();
      console.log(results);
      return fn;
    };

  const mSum = func(2);
  console.log(mSum(3,4,5));

func возвращает 12, как и предполагалось, но мне также нужно продолжить работу с массивом результатов, поэтому я пытаюсь использовать

results.push ({args: arr, result: sum});

это вы используете console.log (arr, sum); Вы можете увидеть его там, но как поместить его в функцию Aouter Func? в результате он нажимает ключи, но значения - пустой массив и 0.

Ответы [ 5 ]

2 голосов
/ 12 июня 2019

Вы можете вернуть объект вместо одного значения.

function func(limit) {
  function fn() {
    let arg = arguments;
    let sum = 0;
    for (let i = 0; i < arg.length; i++) {
      sum += arg[i];
      arr.push(arg[i]);
    };
    return { args: arr, result: sum };
  }

  let results = [];
  let arr = [];
  return fn;
};

const mSum = func(2);
console.log(mSum(3, 4, 5));
0 голосов
/ 12 июня 2019

Сначала в вашем коде произошла ошибка.

в function fn() вы определяете let arg = arguments. Но вы никогда не определяли arguments, поэтому цикл for не будет повторяться.

Также вы возвращаете функцию, а не результат. Вы можете получить результат с помощью следующего кода:

const mSum = func(2);
console.log(mSum());
0 голосов
/ 12 июня 2019
    function func(limit) {
      let results = [];
      let arr = [];

      console.log(limit);
      function fn() {
        let arg = arguments;
        let sum = 0;
        for (let i = 0; i < arg.length; i++) {
          sum += arg[i];
          arr.push(arg[i]);
        };
        console.log(arr, sum); 
        results.push({args: arr, result: sum});
        return results;    // return 'results' rather than sum
      };
      console.log(results); // When you console.log(results), fn is not running yet, so you get a []
      return fn;   
    };

  const mSum = func(2);
  const mSum2 = mSum(3,4,5);  
  console.log(mSum2[0].args,mSum2[0].result);
0 голосов
/ 12 июня 2019

Вы можете сделать что-то вроде

function fn() {
  ...
  return {args: arr, result: sum};
};

Тогда вы сможете получить как arr, так и sum из этой функции, например

const { args, result } = fn();
0 голосов
/ 12 июня 2019

Вы возвращаете функцию.Не результат.Так что const mSum = func(2); возвращает вашу функцию.Если вы хотите получить результаты этой функции, вы должны вызвать ее

const mSum = func(2); // function 
console.log(mSum()); //return value of the returned function
...