JavaScript温度转换函数返回值问题:两段代码为何执行结果不同?
摄氏与华氏温度互转函数问题解析
问题背景
想要用return语句实现摄氏(Celcius)与华氏(Fahrenheit)温度互转,但第一段代码无法返回或输出正确结果,第二段却可以,具体代码如下:
第一段无法正常运行的代码
function convertTemp2(degrees,unit) { if (unit === 'F' || unit === 'C') { conversion(degrees,unit); console.log(`${degrees} ${unit}`) } else { console.log('please use C for celcius, and F for fahrenheit'); } } function conversion(degrees,unit) { if (unit === 'F') { degrees = (degrees+32) *5/9; unit = 'C'; return degrees, unit; } else if (unit === 'C') { degrees = (degrees*9/5) + 32; unit = 'F'; return degrees, unit; } } convertTemp2(1023,'F'); convertTemp2(12,'C'); convertTemp2(123,'H');
第二段可正常运行的代码
function convertTemp2(degrees,unit) { if (unit === 'F' || unit === 'C') { conversion(degrees,unit); } else { console.log('please use C for celcius, and F for fahrenheit'); } } function conversion(degrees,unit) { if (unit === 'F') { degrees = (degrees+32) *5/9; console.log(`${degrees}C`) } else if (unit === 'C') { degrees = (degrees*9/5) + 32; console.log(`${degrees}F`) } } convertTemp2(1023,'F'); convertTemp2(12,'C'); convertTemp2(123,'H');
问题原因分析
return语句用法错误:JavaScript里
return degrees, unit这种写法不生效,逗号运算符在这里只会返回最后一个表达式的值(也就是unit),根本没把转换后的温度值返回出去。如果要返回多个值,得用对象或数组包裹,比如return { degrees, unit }或者return [degrees, unit]。未接收函数返回值:就算
conversion函数返回了正确结果,第一段代码调用它时没把返回值存到变量里。而且degrees和unit是原始类型(数字、字符串),函数内部的修改不会影响外部的变量,最后console.log打印的还是初始传入的值。输出的是原始值:第一段代码里的
console.log(${degrees} ${unit})输出的是传入的原始温度和单位,不是转换后的值,自然看不到正确结果。
第二段代码能运行,是因为它直接在conversion函数内部完成转换并打印,跳过了返回值传递的环节,避开了上面的问题。
修正后的代码(使用return实现)
如果要通过return实现温度转换并输出正确结果,修改如下:
function convertTemp2(degrees, unit) { if (unit === 'F' || unit === 'C') { // 接收转换结果 const result = conversion(degrees, unit); console.log(`${result.degrees.toFixed(2)} ${result.unit}`); } else { console.log('请使用C表示摄氏温度,F表示华氏温度'); } } function conversion(degrees, unit) { let convertedDegrees = degrees; let convertedUnit = unit; if (unit === 'F') { convertedDegrees = (degrees - 32) * 5/9; // 注意:华转摄公式你写错了,正确是(°F - 32) × 5/9 convertedUnit = 'C'; } else if (unit === 'C') { convertedDegrees = (degrees * 9/5) + 32; convertedUnit = 'F'; } // 返回包含转换后数据的对象 return { degrees: convertedDegrees, unit: convertedUnit }; } convertTemp2(1023,'F'); convertTemp2(12,'C'); convertTemp2(123,'H');
内容的提问来源于stack exchange,提问作者Bruce Ferreira
相关产品推荐
相关产品推荐

