JavaScript中声明全局变量三种方式的异同
来源:互联网 发布:阿里云备案拍照 编辑:程序博客网 时间:2024/05/17 14:17
变量及声明变量是一门语言最基本的概念,入门者都会很快掌握。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);//truealert('a2' in window);//truealert('a3' in window);//true用with打开对象window闭包时,所有浏览器也表现一致,如下
with(window){if(a1){alert(a1);//11}if(a2){alert(a2);//22}if(a3){alert(a3);//33}}原文
0 0
- JavaScript中声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同javascript
- JavaScript声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同
- JavaScript声明全局变量三种方式的异同
- JavaScript学习笔记-JavaScript声明全局变量三种方式的异同
- Javascript全局变量的三种声明方式
- 基于JavaScript的三种声明全局变量方式介绍
- 基于JavaScript 声明全局变量的三种方式详解
- JavaScript 声明全局变量的三种方式详解
- 基于JavaScript 声明全局变量的三种方式详解
- 基于JavaScript 声明全局变量的三种方式详解
- JavaScript中声明全局变量的三种方式(包括显示和隐式)
- JS 声明全局变量的三种方式
- 声明全局变量的三种方式
- javascript 函数声明的三种方式
- Spring使用入门示例
- Linux7运维视频教程
- 欧姆定律对电流精确测量造成的缺憾及解决方案
- hdu 4862 Jump 上下界费用流
- 个人主页
- JavaScript中声明全局变量三种方式的异同
- 第十六周项目四 为动态数组扩容
- 用Java实现断点续传(HTTP)
- 第十六周项目4为动态数组扩容
- hdu 4888 Redraw Beautiful Drawings
- Bonjour/Zeroconf with Arduino
- C# 托管内存与非托管内存之间的转换(结合Unity3d的实际开发)
- C++中的时间函数
- the file “XXX” could not be opened because you don't have permission to view it