JavaScript变量
在JavaScript中定义变量
如下所示,定义变量message
,并赋值"hi"
。
var message = "hi";
其中,关键字var
可省略,即直接通过message = "hi";
定义变量,但这种方式不推荐使用(该问题会在全局变量与局部变量中再讨论)。
此外,也可以通过下面的方式一次定义多个变量。
var message = "hi",
name = "john",
age = 20,
sex; // typeof sex = 'undefined'
JavaScript变量为松散类型
所谓松散类型,即一个变量可以保存任何类型的数据,比如下面这种方式是可以的(但不推荐使用)。
var message = "hi"; // typeof message = 'string'
message = 20; // typeof message = 'number'
需要强调一点,松散类型仅仅只变量可以保存任何类型数据,但变量本身是有类型的(如上例中的注释所示)。变量未附任何值时,其类型为undefined
。
全局变量与局部变量
在函数中使用var
定义的变量为局部变量,否则为全局变量。局部变量会在函数退出时销毁。
举个例子,下面这段程序,message
是在testFunc
函数中定义的局部变量,只能在函数内访问;函数退出后再访问这个变量,则会报ReferenceError
错误。与此相反,globalMessage
是全局变量,不仅可以在函数内访问,在函数内的修改也会反应到全局中。
var globalMessage = "hello";
function testFunc() {
var message = "hi";
alert(message); // ="hi"
alert(globalMessage); // ="hello"
globalMessage = "hello from function";
}
testFunc();
alert(message); // [ERROR]ReferenceError: message is not defined
alert(globalMessage); // ="hello from function"
前面说过,定义变量时,关键字var
可以省略,这时候,变量就会变成全局变量,即便它是在函数中定义。如下面的例子所示。但这种方式不推荐使用,一是不便于对全局变量进行维护;二是在严格模式下不支持,会报ReferenceError
错误;三是由于JavaScript变量初始化顺序的问题,可能导致一些未知的错误,这个问题后续会有专门的文章来介绍。
function testFunc() {
message = "hi";
}
testFunc();
alert(message); // ="hi"