该帖已经被评为新手帖
|
|||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||
发表时间:2010-07-25
最后修改:2011-03-18
变量及声明变量是一门语言最基本的概念,入门者都会很快掌握。JavaScript中声明变量也是如此,很简单var(关键字)+变量名(标识符),如下:
var test; //或var test = 5;
需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明全局变量。下面是第二种方式:
test = 5;
没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。
window.test; //或window.test = 5;
这种方式经常被用到一个匿名函数执行后将一些函数公开到全局。
如果只是使用变量test,那么三种方式将没有什么区别。比如:alert(test) 都将显示5。但三种方式在某些情况下还是有区别的,下面分别列出。
分别按以上三种方式声明三个变量a1,a2,a3:
a1 = 11; var a2 = 22; window.a3 = 33;
1,for in window对象时
for(a in window){ if(a=='a1'||a=='a2'||a=='a3'){ alert(a) } }
IE6/7/8/及IE9 pre3 :只弹出了a3,说明通过第一,二种方式声明的全局变量通过for in window对象时将获取不到(原因:http://snandy.iteye.com/blog/723672 )。 Firefox/Chrome/Safari/Opera :a1,a2,a3都弹出了,说明三种方式声明的全局变量,通过for in window对象时都能获取到。
2,delete时
try { alert(delete a1); }catch(e){alert('无法delete a1')} try{ alert(delete a2); }catch(e){alert('无法delete a2')} try{ alert(delete a3); }catch(e){alert('无法delete a3')} 结果如下:
可以看到,
1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。 2,通过window.a3方式声明的全局变量在IE6/7/8/9中均无法删除,Firefox/Chrome/Safari/Opera中却可以。 3,IE9 pre3很奇怪,delete a1显示false,即不能delete隐式声明的全局变量。
虽然有以上两点不同,但当用in运算时,都返回true。如下
alert('a1' in window);//true alert('a2' in window);//true alert('a3' in window);//true 用with打开对象window闭包时,所有浏览器也表现一致,如下
with(window){ if(a1){ alert(a1);//11 } if(a2){ alert(a2);//22 } if(a3){ alert(a3);//33 } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-26
不错的小知识 学习了
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-26
javascript这个东西 不同浏览器实现 的 程度不同,有时很是恼火。
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-27
喜欢这样的小总结,有时候就那么就 悟 啦
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-27
浏览器兼容,唉
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-27
学习了,很有意义的总结
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-27
楼主真的很细心。赞一个。
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-27
不同的JavaScript引擎导致的,这种细节很是烦人
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-27
浏览器的兼容问题是js最大的问题了。
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2010-07-28
![]() ![]() |
|||||||||||||
返回顶楼 | |||||||||||||