javascript的变量

1.javascript的变量是无类型的(untype)。

2.用var声明的变量是永久性的。所以当你试图用delete来删除其声明的变量时会报错。

3.当试图读取一个未声明的变量时,会报错。

4.当给一个未用var声明的变量赋值时,js会隐式的声明该变量(这个变量会被声明为全局变量,所以最好用var来声明。这一点在局部声明时非常重要)。

5.在函数内部,局部变量的优先级要高于同名的全局变量(相当于隐藏了该同名的全局变量)。

结合4,5两点。我们给出一个列子来说明其重要性。

var part = "global"; //声明一个全局变量

function checkpart()

{

var part = "local"; //声明一个局部变量

document.write(part);

}

checkpart(); //输出local

document.write(part); // 输出global

当你在声明part局部变量时省略了var。这就相当于声明了一个全局变量,即改变了全局变量part的值。下面的两条语句输出的都是local。

 

6.没有块级作用域。函数中声明所有变量(无论在哪里声明的),在整个函数中他都是有定义的。

var part = "global";

function checkvariable()

{

document.write(part);

}

checkvariable(); //输出global

 

var part = "global";

function checkvariable()

{

documen.write(part);

var part = "local";

document.write(part);

}

checkvariable();

上述代码第一次输出的不是global,而是undefined。这告诉我们在函数中声明变量时尽量将其集中放在函数的开头。

 

7.变量的内容

js中数据类型分为两组:基本数据类型和引用类型。数值,布尔值,null和未定义的值属于基本类型。对象,数组,函数属于引用类型(函数也是一种数据类型)。(字符串属于特殊类型)。基本数据类型在内存中具有固定的大小:一个数值占8个字节(在基本类型中最大),一个布尔值占一位。而引用类型具有任意长度,没有固定的大小。无法将其直接与每个相关变量储存在8个字节的内存中。所以变量储存的是这个值的引用(通常引用有两种形式:指针和内存地址)。这两中数据类型具有很大的差别。

var i = 1;

var j = i;

i = 2;

alert(j); //输出1

 

var i = new Array(1,2,3);

j = i;

i[0] = 2;

alert(j); //输出2,2,3

 

 

8.作为属性的变量

js解释器在工作之前会在所有js代码运行之前创建一个全局对象。这个全局对象的属性就是所有的全局变量。同理也会存在一个调用对象。而这个调用对象的属性就是所有的局部变量。一个js解释器可以工作在不同的执行环境中。这些执行环境彼此独立且又相互联系。(执行环境:不同的窗口,框架)。

posted @ 2013-05-19 20:43  {前端开发}  阅读(230)  评论(0编辑  收藏  举报