声明全局变量三种方式的异同
2015-09-02 16:44
225 查看
方式1
需注意的是该句不能包含在function内,否则是局部变量。这是第一种方式声明全局变量。
方式2
没有使用var,直接给标识符test赋值,这样会隐式的声明了全局变量test。即使该语句是在一个function内,当该function被执行后test变成了全局变量。
方式3
这种方式经常被用到一个匿名函数执行后将一些函数公开到全局。 如JQuery1.5中最末一句
如果只是使用变量test,那么三种方式将没有什么区别。比如:alert(test) 都将显示5。但三种方式在某些情况下还是有区别的。分别按以上三种方式声明三个变量a1,a2,a3。
1,for in window
IE6/7/8/9:只弹出了a3,说明通过第一,二种方式声明的全局变量通过for in window时将获取不到。
Firefox/Chrome/Safari/Opera :a1,a2,a3都弹出了,说明三种方式声明的全局变量,通过for in window时都能获取到。
2,delete
结果如下
可以看到,
1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。
2,通过window.a3方式声明的全局变量在IE6/7/8中均无法删除,IE9/Firefox/Chrome/Safari/Opera中却可以。
虽然有以上两点不同,但当用in运算时,都返回true。
用with打开对象window闭包时,所有浏览器也表现一致,如下
方式2
方式3
Firefox/Chrome/Safari/Opera :a1,a2,a3都弹出了,说明三种方式声明的全局变量,通过for in window时都能获取到。
2,delete
结果如下
可以看到,
1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。
2,通过window.a3方式声明的全局变量在IE6/7/8中均无法删除,IE9/Firefox/Chrome/Safari/Opera中却可以。
虽然有以上两点不同,但当用in运算时,都返回true。
用with打开对象window闭包时,所有浏览器也表现一致,如下
相关文章推荐
- HDU 5424——Rikka with Graph II——————【哈密顿路径】
- Ljava.lang.String; cannot be cast to java.lang.String错误
- 【转载】egret横屏问题
- eclipse修改dynamic web module version
- 二叉树
- twisted16 mail_stmp
- java事件处理机制
- atlassian JIRA 插件开发(五) — workflow condition、validator和post functions
- 切换同一个按钮的状态
- iOS之集合对象:将NSArray和NSDictionary两个集合对象写到一个文件中
- 二叉树性质
- K-Nearest Neighbor algorithm K最邻近结点算法
- java事件处理机制
- win8.1 host被删,host无法修改,host无法复制进去解决方案
- mac下安装伪分布hadoop2.6.0和hbase1.0.1.1
- Linux软件管理——yum命令详解
- 工作流表结构设计
- 已知服务器ftp的账号密码,求解数据库表的内容
- The content of the adapter has changed but ListView did not receive a notification. Make sure the co
- 初识Duilib界面库