javascript中的变量

来自http://blankyao.cn
变量(variable)是一个和数值相关的名字,我们就说变量“存储”了或“包含”了那个值,有了变量,你就可以在程序中存储和运算数据了

1类型规则
2声明
3作用域内容
4解析方法
5无用存储单元的收集
6变量/属性二元性的问题
参考:javascript权威指南

1 变量的类型

javascript是无类型的(untype),也就是说js的变量可以存放任何类型的值,这点和php差不多,而java和c都只能存放它所声明了的特定类型的数据

eg.      i=1;

           i="qqq";

先把一个数值赋给一个变量,然后再把一个字符传赋给它在PHP和JS中是完全可以的,但是在c和java中确是不可以的

有一个特性是与js 缺少类型规则相关,在必要的时候js可以快速,自动地把一种类型的值转换成另外一种类型,在PHP中也是这样的,最典型的例子是把一个数值连接到一个字符串上,会自动把这个数字装换为相应的字符串

2 变量的声明

在js中,在使用一个变量前,必须要声明,这点个C是一样的但是和PHP不同。声明的方法和C 语言差不多的

          var a;

          var b;

或者

        var a,b;

或者

          var a="hello";

          var b="love";

***如果给一个未声明的变量赋值,js 会隐式声明该变量 ,但是被创建的是全局变量,即使该变量只在一个函数体中使用。所以要特别注意的是在函数体内创建局部变量时一定要用var语句

3 变量的作用域

在这里我不想做太多的解释,只想说一个地方:在函数体内部,局部变量的优先级比同名的局部变量高。

eg.   

JavaScript代码
scope="global"; //声明一个全局变量   
function checkscope()   
{   
scope="local";//改变了全局变量   
document.write(scope);//使用的是全局变量   
myscope="local";//隐式声明新的全局变量   
document.write(myscope);//使用的是新的全局变量   
}   
checkscope();//输出“locallocal”   
document.write(scope);//输出“local”   
document.write(myscope);//输出“local”   



另外,和C与JAVA 不同的是,js没有块级作用域

4 解析方法

可以将数据类型分为两组,即基本类型和引用类型

基本类型:数值,布尔值,null和未定义的值

引用类型:对象,数组,函数

基本类型在内存中具有固定的大小,可以存储在变量中;引用类型没有固定大小,所以不能将它们的值存储在变量中,存储的是对这个值的引用,通常引用的形式是指针或者内存地址

5无用存储单元的收集

c和c++这样的语言中,内存必须手动的释放,而js则不要求手动释放,它使用一种称为存储单元收集(garbage collection)的方法.

eg.  var s="hello";//给一个字符串分配内存

            var u=s.toUpperCase();//创建一个新字符串

   s=u;//覆盖对原始字符串的引用

运行了这个程序就不能再获得原始的字符串"hello",因为程序没有变量再引用它了.系统检测到这一事实后,就会释放该字符串的存储空间以便这些空间再被利用

6变量/属性二元性的问题

变量基本上和对象是一样的在执行任何代码之前,都要创建一个全局对象,这个对象的属性就是js程序的全局变量.当声明一个全局变量时实际上做的是定义了那个全局对象的属性

局部变量又是什么呢?他们也是对象的属性,这个对象被称为调用对象