我有一个简单的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记录到控制台,什么也不返回。甚至没有定义。
答案 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
返回的值进一步阅读: