JavaScript进阶教程(第一课)
更新时间:2007年04月06日 00:00:00 作者:
这里是一个应用变量的例子:
var happiness = "a banana split";
alert("The monkeys think happiness is " + happiness);
这行代码声明一个叫做happiness的变量,然后在一个alert对话框中调用这个变量。如果你看过别人的JavaScript,你可能会注意到他们在声明变量时使用了var,这种用法可能会造成问题。首先,可能会造成有些版本的MSIE瘫痪,或运行不正常。这种情况在Mac机上的MSIE最有可能发生。其次,如果你编写很复杂的JavaScripts,你必须编写你自己的函数,所以你必须了解变量的含义。
正如上次的JavaScript教程: 第四课中所述,函数是被调用后执行某特定功能的JavaScript程序代码。最好的函数具有模块化的特性,你可以控制输入的变量以及输出的结果。而且一旦编好之后你就无需担心它会出问题,而且不会和别的函数发生冲突。要使编写地函数具备这些稳定的特性,你必须确保不要轻易改变那些作为参数传递给其他函数的变量. 下面对例子显示了如果你不注意这些细节会造成什么后果。假设我们编写一个程序将华氏温度转换为摄氏温度。点击华氏/摄氏来观察一下我所指的意思。如果你转换转换华氏50度,则会出现一条信息:
“50 degrees Fahrenheit is 10 degrees Celsius(华氏50度相当于摄氏10度)。”
以下是代码:
function fahrenToCelsius(fare)
{
temp = (faren - 32) * 5/9;
return temp;
}
function convertTemp()
{
temp = prompt("what temperature fahrenheit? ","50");
celsius = fahrenToCelsius(temp);
alert(temp + " degrees Fahrenheit is " + celsius + " degrees Celsius.");
}
这个程序很简单。一个叫做convertTemp()得函数调用另外一个叫做fahrenToCelsius()并返回结果。如果你对本程序不是很懂,你需要重新学习一下javasript初级教程第四课。
关于这个例子让人困惑之处在两个函数中都有一个叫做temp的变量,在convertTemp()函数中它的作用是储存华氏温度Fahrenheit值 (由用户提供)。在fahrenToCelsius()函数中,它用于计算转换后的摄氏温度值Celsius。这个不仅让我们感到困惑而且也会让这个Javascript程序感到困惑。如果你试图用变量运行这段代码就会发生下面的结果:如果你希望转换华氏50度,则会显示下面的信息:"10 degrees Fahrenheit is 10 degrees Celsius."(华氏10度相当于摄氏10度)。为什么你输入的是华氏50度,而程序却将其理解为你输入了10度呢?我们来研究一下这个程序的执行过程。当我们调用函数convertTemp()并在提示栏中输入了"50"时,我们得到temp = 50;然后"temp"被传递给函数farenToCelsius()。在farenToCelsius()中,参数faren被设定为50,而"temp" 被设定为(50 - 32) x 5/9, 其结果是10。在返回结果之前,各项参数值是:
faren = 50
temp = 10
现在farenToCelsius()将10返回给变量celsius:
temp = 10
celsius = 10
现在我们得到一个错误的语句: "10 degrees Fahrenheit is 10 degrees Celsius"。如果你仔细一些,不要将两个函数中的变量起同样的名称就可以避免这些问题。但这也不是最佳解决方案。当你不断加入更多的函数时,很难确保你不会将函数中的变量重名。而且如果你重复使用许多变量名例如loop,index,count和the_name时,使用不同的名称实在是一个很令人头疼的事。
最好的解决办法是让JavaScript明白在fahrenToCelsius()函数中用到的变量temp和在convertTemp()函数中用到的变量temp是两码事。如果每个函数都有只应用于本函数内部的变量temp你就无需担心不同函数中的同名变量会搅成一团。而var就是用于这个目的。
要使JavaScript中各种同名变量不会发生混淆,你可以在声明变量时在变量前面加上var。在一个函数内用var声明后灯的变量叫做局部变量,它只存在于该函数内部。通常情况下你应该尽量使用局部变量。
这里是用var声明后的正确的JavaScript代码:
function fahrenToCelsius(faren)
{
var temp = (faren - 32) * 5 / 9;
return temp;
}
function convertTemp()
{
var temp = prompt("what temperature Fahrenheit? ","50");
var celsius = badFahrenToCelsius(temp);
alert(temp + " degrees Fahrenheit is " + celsius + " degrees Celsius.");
}
现在当我们输入50时,(在convertTemp函数内部) temp = 50
temp被传递到函数fahrenToCelsius(),在函数fahrenToCelsius()内部,参数faren现在被设定为50,然后temp用以下代码设定:
var temp = (faren - 32) * 5 / 9;
由于这个temp变量前面用var做了声明,所以该变量同其他函数中叫做temp的变量不同。执行完fahrenToCelsius()时,该函数种的temp即告消失。所以在fahrenToCelsius()返回数值前,faren = 50
(在fahrenToCelsius内部) temp = 10
(在convertTemp内部) temp = 50
fahrenToCelsius()然后返回它的变量temp值10。一旦我们从fahrenToCelsius()函数中出来,该函数中等temp变量的作用即告终止。当fahrenToCelsius() 返回时,它将变量的值设置为10:
(在convertTemp内部) temp = 50
(在convertTemp内部) celsius = 10
现在显示的信息将是我们所希望的"50 degrees Fahrenheit is 10 degrees Celsius"。
相关文章
javascript学习笔记(十四) window对象使用介绍
javascript学习笔记之window对象使用介绍,需要的朋友可以参考下2012-06-06
在JavaScript中操作时间之getYear()方法的使用教程
这篇文章主要介绍了在JavaScript中操作时间之getYear()方法的使用教程,是JS入门学习中的基础知识,需要的朋友可以参考下2015-06-06
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
这篇文章主要介绍了JavaScript字符串对象charAt方法入门实例,charAt方法用于取得指定位置的字符,需要的朋友可以参考下2014-10-10


最新评论