问题描述
我是JavaScript的新手,我有一个作业要把数字提示(Celsius)转换成Fahrenheit和Kelvin,但是我的Fahrenheight和Kelvin在运行程序时显示为undefined,有人解决方案吗?
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.");
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.");
2楼
您的问题是可变范围之一;
您实际上并没有将celcius
传递给任何一个函数。
除此之外,出于相同的原因,您不会在函数中检索分配给fahrenheight
或kelvin
的值。
为了解决这个问题,您需要将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);
另外,您根本根本不使用函数,因为它们会产生相同的效果(因为所有变量都在同一范围内)。
3楼
2个问题。 1)您没有在函数中使用全局变量。 您正在本地重新创建一个。 您可以通过将功能更改为以下内容来解决此问题:
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.");
您还必须选择重写函数以 。 因此,您的函数将如下所示(在此示例中,我仅使用了一个):
document.write(FahrenheightConvert(celsius) + " degrees Fahrenheight.");
这将使您的通话等于华氏高度的值。 这样,您可以将您的write语句更改为:
document.write(FahrenheightConvert(celsius) + " degrees Fahrenheight.");
最后,我还要提到,正如评论所提到的,我的第一个选择(在PS之前)是不良设计,不建议使用。 我强烈建议改用这种方式重写您的函数。 这样,您便可以随意使用通用转换功能,而不必担心它将直接写入文档或其他内容。
4楼
您的fahrenheight
和kelvin
变量不会被写入,因为转换器是内部函数,永远不会被调用。
由于您的所有代码都是从头到尾运行的,所以最简单的事情就是在不定义函数的情况下进行计算。
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.");