作业帮 > Javascript > 教育资讯

JavaScript教程:三种JavaScript声明全局变量方式的异同

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/10 08:57:21 Javascript
JavaScript教程:三种JavaScript声明全局变量方式的异同
JavaScript教程:三种JavaScript声明全局变量方式的异同Javascript
【51Test.NET-JavaScript教程:三种JavaScript声明全局变量方式的异同】:

变量及变量声明是任何一门语言最基础的概念,初学者都会很快掌握。JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符)。

方式1

1 var test; 

2 var test = 5;
 
需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明全局变量。

 

方式2

1 test = 5; 
没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。

 

方式3

1 window.test; 

2 window.test = 5; 
这种方式经常被用到一个匿名函数执行后将一些函数公开到全局。 如JQuery1.5中最末一句

1 window.jQuery = window.$ = jQuery;


如果只是使用变量test,那么三种方式将没有什么区别。比如:alert(test) 都将显示5。但三种方式在某些情况下还是有区别的。分别按以上三种方式声明三个变量a1,a2,a3。

1 a1 = 11; 

2 var a2 = 22; 

3 window.a3 = 33;


1,for in window

1 for(a in window){ 

2     if(a=='a1'||a=='a2'||a=='a3'){ 

3         alert(a) 

4     } 

5 } 
IE6/7/8/9:只弹出了a3,说明通过第一,二种方式声明的全局变量通过for in window时将获取不到。
Firefox/Chrome/Safari/Opera :a1,a2,a3都弹出了,说明三种方式声明的全局变量,通过for in window时都能获取到。

 

2,delete

01 try { 

02     alert(delete a1); 

03 }catch(e){alert('无法delete a1')} 

04   

05 try{ 

06     alert(delete a2); 

07 }catch(e){alert('无法delete a2')} 

08   

09 try{ 

10     alert(delete a3); 

11 }catch(e){alert('无法delete a3')} 
结果如下

 

可以看到,
1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。
2,通过window.a3方式声明的全局变量在IE6/7/8中均无法删除,IE9/Firefox/Chrome/Safari/Opera中却可以。


虽然有以上两点不同,但当用in运算时,都返回true。

1 alert('a1' in window);//true 

2 alert('a2' in window);//true 

3 alert('a3' in window);//true 
用with打开对象window闭包时,所有浏览器也表现一致,如下

01 with(window){ 

02     if(a1){ 

03         alert(a1);//11 

04     } 

05     if(a2){ 

06         alert(a2);//22 

07     } 

08     if(a3){ 

09         alert(a3);//33 

10     }    

11 } 

Javascript