我是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.");
答案 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
传递给任何一个函数。除此之外,出于相同的原因,您不会检索在函数中分配给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);
或者,您根本无法使用完全具有相同效果的函数(因为所有变量都在同一范围内)。
答案 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.");
您还必须选择将函数重写为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)
您的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.");