7.4 变量与数据类型
变量及数据类型是所有编程语言的重要概念和组成部分,WMLScript对此也不例外。它对其变量使用方法和数据类型定义方法给出了详细的规定。变量通常与某数据值相对应,我们可以给变量赋值,并可在程序执行中改变变量的值。下面我们讲解WMLScript有关变量与数据类型的详细规定。
7.4.1 变量及其声明
变量是在WMLScript脚本程序中具有值的符号名,或说标识符。使用变量可以存储和改变程序中需要的数据。与C语言不同的是,WMLScript仅支持函数内定义的变量或用于传送数值的参变量。
变量使用前必须进行声明,也就是定义变量,即指定变量的名字。声明变量的关键字是var,它的后面跟上作为变量名的合法的标识符,并于最后加上分号(;),即完成一个变量的声明。声明变量时可以使用var一次声明多个变量名,相邻变量名之间使用逗号(,)间隔。语法格式为:
var 变量名1, 变量名2, ……, 变量名n ;
例如,以下几行语句都是合法的声明变量的语句:
var x;
var price5d;
var x, y, z;
WMLScript还允许我们在定义变量的同时对变量进行初始化。方法是使用等号( = )直接在变量右边赋值,语法格式为:
var 变量名=初始值 ;
例如:
var size = 12;
如果声明变量不进行初始化,那么WMLScript将自动把该变量初始化为空字符串(" ")。
需要说明的是,同一函数中定义的所有变量的变量名必须是唯一的,否则就会导致编译错误。
一般情况下,我们在给变量命名的时候,都希望能够使用有意义的变量名。例如,当需要使用一个变量表示一本书的价格时,虽然将变量命名为j或book都没有什么错误,但若能命名为bookPrice则会使得WMLScript脚本程序具有更好的可读性,可以方便编程人员进行脚本的编写和调试工作。而且,由于WMLScript在给变量命名时不能使用保留字,所以考虑到避免由于一时的疏忽使变量名与保留字发生冲突,我们建议使用多个单词组合在一起作为一个变量的名称,这是一个比较好的解决办法。例如,如果要定义一个变量来存储一本书的价格,那我们可以不妨使用bookPrice或者book_price作为变量的名称,这样,一方面可以使变量的定义显得更加清晰,另一方面也可以避免变量与保留字的冲突问题。
以上只是我们对于变量命名的建议,并不是强制性的要求,用户完全可以不按照我们的要求来做,只要遵守WMLScript对于标识符命名的要求就可以了,但养成良好的编程风格不论是对编程人员还是对脚本编写人员来说,都是十分有意义的。
7.4.2 变量的作用域与生命期
一个变量的作用域是指在程序中能够引用这个变量的一段代码。由于WMLScript仅支持函数内定义的变量,所以WMLScript变量的作用域通常就是定义它的那个函数。在该函数之外,变量不再发挥直接作用。
例如,下面的priceCheck( )函数中有newPrice和givenPrice两个变量,其中givenPrice是为函数传递参数值的参变量。这两个变量只在priceCheck( )函数中可以发挥作用,也就是说,它们的作用域是priceCheck( )函数:
function priceCheck(givenPrice) {
if (givenPrice > 100) {
var newPrice = givenPrice;
} else {
newPrice = 100;
};
return newPrice;
};
变量的生命期是指从变量声明开始到失效为止。变量的生命期也被称为变量的持久期、存活期。任一个变量在定义它的整个函数内都是有效的,函数内的任何语句块都不会削减变量的生命期或限制变量的作用域。
如果一个变量未经声明就直接使用,或声明过后再次声明,都会破坏变量的生命期。前一种情况会导致变量没有开始生命期,即没有“生命”;而后一种情况则导致变量生命期没有结束以前就重新赋予生命期,即让它多次“降生”。这都会导致变量无效使用。下面函数中的变量使用就说明了这一问题:
function foo( ) {
x = 1; // 错误:变量使用前没有声明,该变量还没有“生命”。
var x,y,z;
y = x + 3;
var zd = invalid;
if (x) {
var (y); // 错误:这一变量已经声明,这里是重复声明。
};
};