建站学 - 轻松建站从此开始!

建站学-个人建站指南,网页制作,网站设计,网站制作教程

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

时间:2011-03-20 10:32来源: 作者: 点击:
变量及变量声明是任何一门语言最基础的概念,初学者都会很快掌握。JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符)。 方式1 1 var test;  2 var test = 5;<BR> 需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明

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

方式1

1 var test; 

2 var test = 5;<BR>
需注意的是该句不能包含在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 }

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片