JavaScript的新手需要将Celsius转换为Fahrenheit和Kelvin,为什么我的代码无法正常工作?

时间:2019-02-14 21:24:38

标签: javascript

我是JavaScript的新手,我有一份作业要把数字提示(Celsius)转换为Fahrenheit和Kelvin,但是我的Fahrenheight和Kelvin在运行程序时显示为未定义,有没有解决方案? / p>

        var celcius;
        var fahrenheight;
        var kelvin;

        celcius = Number(window.prompt("Enter Degree", 50));
        document.write(celcius + " degrees Celcius.");
        
        function FahrenheightConvert() {
            var fahrenheight = Math.round(9 / 5 * (celcius + 32));
        }
        document.write("<br>");
        document.write(fahrenheight + " degrees Fahrenheight.");
        
        function KelvinConverter(){
            var kelvin = (celcius + 273.15);
        }
        document.write("<br>");
        document.write(kelvin + " in Kelvin.");

4 个答案:

答案 0 :(得分:1)

函数内部的代码直到您通过调用该函数将其告知后才运行。您永远不会调用任何已编写的函数,因此其中的转换代码将永远不会运行。

在这种情况下,您可以完全删除功能,而无需担心:

var celcius;
var fahrenheight;
var kelvin;

celcius = Number(window.prompt("Enter Degree", 50));
document.write(celcius + " degrees Celcius.");

fahrenheight = Math.round(9 / 5 * (celcius + 32));
document.write("<br>");
document.write(fahrenheight + " degrees Fahrenheight.");

kelvin = (celcius + 273.15);
document.write("<br>");
document.write(kelvin + " in Kelvin.");

答案 1 :(得分:1)

您的问题是范围可变的问题之一;您实际上并没有将celcius传递给任何一个函数。除此之外,出于相同的原因,您不会检索在函数中分配给fahrenheightkelvin的值。

要解决此问题,您需要将celcius作为函数参数传递给两个函数,并确保实际调用它们:

var celcius;
var fahrenheight;
var kelvin;

celcius = Number(window.prompt("Enter Degree", 50));
document.write(celcius + " degrees Celcius.");

function FahrenheightConvert(celcius) {
  var fahrenheight = Math.round(9 / 5 * (celcius + 32));
  document.write(fahrenheight + " degrees Fahrenheight.");
}

document.write("<br>");
FahrenheightConvert(celcius);

function KelvinConverter(celcius) {
  var kelvin = (celcius + 273.15);
  document.write(kelvin + " in Kelvin.");
}

document.write("<br>");
KelvinConverter(celcius);

或者,您根本无法使用完全具有相同效果的函数(因为所有变量都在同一范围内)。

答案 2 :(得分:1)

2个问题。 1)您没有在函数中使用全局变量。您正在本地scope中重新创建一个。您可以通过将功能更改为以下方式来解决此问题:

 function FahrenheightConvert() {
   fahrenheight = Math.round(9 / 5 * (celcius + 32));
 }

 function KelvinConverter(){
   kelvin = (celcius + 273.15);
 }

这将改为使用全局范围变量。

2)您从不调用函数,仅定义它们。因此,您可以像这样调用它们:

FahrenheightConvert();        
KelvinConverter();

这实际上将运行您创建的代码。最终结果是这样的:

        var celcius;
        var fahrenheight;
        var kelvin;

        celcius = Number(window.prompt("Enter Degree", 50));
        document.write(celcius + " degrees Celcius.");
        
        function FahrenheightConvert() {
           fahrenheight = Math.round(9 / 5 * (celcius + 32));
        }
        /* Actually call the funciton */
        FahrenheightConvert();
        
        document.write("<br>");
        document.write(fahrenheight + " degrees Fahrenheight.");
        
        function KelvinConverter(){
            kelvin = (celcius + 273.15);
        }
        /* Again, actually call the funciton */
        KelvinConverter();

        document.write("<br>");
        document.write(kelvin + " in Kelvin.");
附注:由于您是JavaScript的新手,所以我会告诉您其他可用的选项,您可能会发现这很有用。

您还必须选择将函数重写为return a value。因此,您的函数将如下所示(本示例中仅使用了一个):

 function FahrenheightConvert(celcius) {
   var fahrenheight = Math.round(9 / 5 * (celcius + 32));
   return fahrenheight;
 }

这将使您的通话等于华氏高度的值。这样,您可以将您的write语句更改为:

document.write(FahrenheightConvert(celsius) + " degrees Fahrenheight.");

最后,我还要提到,正如评论所提到的那样,我的第一个选择(在PS之前)是不良设计,不建议这样做。我强烈建议改用这种方式重写您的函数。这样,您便可以随意使用通用转换功能,而不必担心它将直接写入文档或其他内容。

答案 3 :(得分:0)

您的fahrenheightkelvin变量永远不会被写入,因为转换器是内部函数,永远不会被调用。由于您的所有代码都是从头到尾运行的,所以最简单的事情就是在不定义函数的情况下进行计算。

var celcius;
        var fahrenheight;
        var kelvin;

        celcius = Number(window.prompt("Enter Degree", 50));
        document.write(celcius + " degrees Celcius.");
        
        var fahrenheight = Math.round(9 / 5 * (celcius + 32));
        document.write("<br>");
        document.write(fahrenheight + " degrees Fahrenheight.");
        
        var kelvin = (celcius + 273.15);
        document.write("<br>");
        document.write(kelvin + " in Kelvin.");