如何从内部函数中获取值

时间:2019-06-12 12:04:51

标签: javascript function scope return

我需要从内部函数fn获取值(arr,sum)。我试图将其推入外部函数的results数组中,或尝试像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);您可以在那里看到它,但是如何将其放在外部函数func中呢? 结果它按下了键,但是值是空数组和0。

5 个答案:

答案 0 :(得分:2)

您可以返回对象,而不是单个值。

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));

答案 1 :(得分:0)

您正在返回一个函数。不是结果。因此const mSum = func(2);返回您的函数。如果需要该函数的结果,则必须调用它

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

答案 2 :(得分:0)

您可以做类似的事情

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

然后您将可以通过此功能同时获得arrsum

const { args, result } = fn();

答案 3 :(得分:0)

    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);

答案 4 :(得分:0)

起初,您的代码中有一些错误。

function fn()

定义let arg = arguments。但是您从未定义arguments,所以for循环不会迭代。

还返回一个函数,而不是结果。您可以通过以下代码获得结果;

const mSum = func(2);
console.log(mSum());