在控制台中调用时,函数返回值,但在函数声明之后调用时,函数不返回值

时间:2019-01-18 20:59:01

标签: javascript

我有一个简单的for循环,可以将数字添加到给定数组中。 如问题所述,我在控制台中调用该函数并将数组之一传入..没问题。记录并返回预期值。

但是,如果我在函数声明之后立即在脚本中调用函数。 它将完成日志,但不返回任何内容。我什至都没有得到定义。

我正在使用VS Code(看不到这会如何影响), 正在运行实时服务器。

只是试图确定为什么在控制台中调用该函数时一切正常,但是如果我在脚本中调用它,那么它将拒绝返回值。

我已经在函数中定义了总变量,然后尝试全局声明它(不是我可以看到它在如此简单的一个函数脚本中会有所不同)。 我将功能的每个步骤都记录到了控制台,没有任何问题。 一切都打印了,但是没有返回值。

let numsA = [1, 10, 13, 5, 2, 1, 9, 8, 23];
let numsB = [15, 18, 5, 23, 55, 2, 9, 15, 15];

function sumArray(arr) {
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i];
  }
  console.log(sum);
  return sum;
}

console.log(sumArray(numsA));

预期结果: sumArray(numsA):72记录到控制台,然后返回;

实际结果:72记录到控制台,什么也不返回。甚至没有定义。

3 个答案:

答案 0 :(得分:0)

在我看来,您对return语句实际上在做什么有些困惑。 return语句停止函数的执行并从该函数返回一个值。因此,在将数组作为参数传递后,您的函数将启动执行上下文,它将同步运行您的代码,然后在将sum作为函数值返回时。 console.log会将其记录到控制台。如果不将函数的值附加到控制台,使用alert()或dom节点,就不会有地方让您看到它返回的内容。

答案 1 :(得分:0)

您必须在函数外部声明sum,然后调用该函数以获取所需的内容。

let numsA = [1, 10, 13, 5, 2, 1, 9, 8, 23];
let numsB = [15, 18, 5, 23, 55, 2, 9, 15, 15];

let sum = 0

function sumArray(arr) {
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i];
  }
}

sumArray(numsA)
console.log(sum);

答案 2 :(得分:0)

return语句在您的代码中运行良好:

let numsA = [1, 10, 13, 5, 2, 1, 9, 8, 23];
let numsB = [15, 18, 5, 23, 55, 2, 9, 15, 15];

function sumArray(arr) {
  let sum = 0;
  for (let i = 0; i < arr.length; i++) {
    sum += arr[i];
  }
  console.log(sum);
  return sum;
}

console.log(sumArray(numsA));

如您所见,它console.log具有以下特征:

72 
72

这是因为您有两个console.log调用-一个在函数内部:

console.log(sum);

该函数之外的一个:

console.log(sumArray(numsA));

您希望使用的第一个,因为它正在记录一个变量。第二个是记录返回值,因为所有涉及对sumArray的调用的操作都将导致返回值。


例如,您可以使用函数返回的值创建变量。这是一个简单的演示:

function myFunction() {
  return "Return value";
}

var returnTest = myFunction();

console.log(returnTest);

它还可以与仅调用函数一起使用:

function myFunction() {
  return "Return value";
}

console.log(myFunction());

上面的代码意味着:

  • 执行myFunction
  • console.log返回的值

因此,当您运行时,在您的代码中:

console.log(sumArray(numsA));

它实际上意味着:

  • 使用参数sumArray执行numsA
  • console.log返回的值

进一步阅读: