JavaScript函数提前return后console.log失效、功能异常问题求解
JavaScript温度振幅计算函数问题解答
问题1:console.log无法成功输出的原因
- 函数内部的两处
console.log都没有执行机会:第一处打印合并后数组的语句被手动注释,第二处打印最大最小值的语句位于return temps之后,属于不可达代码,永远不会运行。 - 函数外部调用的
console.log(temps, amplitudeNew)中,temps是calcTempAmplitudeNew函数内部用const声明的局部变量,作用域仅限函数内部,全局作用域无法访问,执行时会抛出Uncaught ReferenceError: temps is not defined错误。
问题2:return temps后函数功能异常的原因
JavaScript函数执行时一旦遇到return语句,会立即终止当前函数的执行流程,直接将return后的值返回给调用方,return语句之后的所有代码都不会被执行。你在完成数组合并后就直接return temps,后续的最大最小值遍历、振幅计算逻辑完全没有运行,函数自然无法实现温度振幅计算的功能。
修复后的代码示例
const calcTempAmplitudeNew = function (t1, t2) { const temps = t1.concat(t2); console.log(temps); // 取消注释即可输出合并后的数组 // 移除提前return temps的语句即可恢复正常逻辑 let max = temps[0]; let min = temps[0]; for (let i = 0; i < temps.length; i++) { const curTemp = temps[i]; if (typeof curTemp !== 'number') continue; if (curTemp > max) max = curTemp; if (curTemp < min) min = curTemp; } console.log(max, min); // 若需要同时返回temps和振幅,可改为返回对象:return { amplitude: max - min, temps } return max - min; }; const amplitudeNew = calcTempAmplitudeNew([3, 5, 1], [9, 0, 5]); // 若返回对象可通过如下方式打印:console.log(amplitudeNew.temps, amplitudeNew.amplitude) console.log(amplitudeNew);
内容的提问来源于stack exchange,提问作者Hirak Deb Nath
相关产品推荐
相关产品推荐

