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


Posted in Javascript onDecember 03, 2013

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

方式1

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

方式2

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

方式3

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

window.jQuery = window.$ = jQuery;

如果只是使用变量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/9:只弹出了a3,说明通过第一,二种方式声明的全局变量通过for in window时将获取不到。
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')}

结果如下

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

可以看到,
1,delete a2所有浏览器都是false。即通过var声明的变量无法删除,所有浏览器表现一致。这在犀牛书上也有提到。

2,通过window.a3方式声明的全局变量在IE6/7/8中均无法删除,IE9/Firefox/Chrome/Safari/Opera中却可以。

虽然有以上两点不同,但当用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
 } 
}

Javascript 相关文章推荐
三种动态加载js的jquery实例代码另附去除js方法
Apr 30 Javascript
浅析webapp框架AngularUI的demo
Dec 21 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
jquery实现聚光灯效果的方法
Feb 06 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
Dec 05 Javascript
用js屏蔽被http劫持的浮动广告实现方法
Aug 10 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
Aug 09 jQuery
vue2.0 + ele的循环表单及验证字段方法
Sep 18 Javascript
为什么要使用Vuex的介绍
Jan 19 Javascript
vue实现侧边栏导航效果
Oct 21 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
Feb 07 Javascript
原生JS实现微信通讯录
Jun 18 Javascript
解析JavaScript中delete操作符不能删除的对象
Dec 03 #Javascript
解析Javascript小括号“()”的多义性
Dec 03 #Javascript
解析Javascript中中括号“[]”的多义性
Dec 03 #Javascript
jquery将一个表单序列化为一个对象的方法
Dec 02 #Javascript
jQuery获得内容和属性方法及示例
Dec 02 #Javascript
jquery如何实现锚点链接之间的平滑滚动
Dec 02 #Javascript
jquery通过a标签删除table中的一行的代码
Dec 02 #Javascript
You might like
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
聊天室php&mysql(六)
2006/10/09 PHP
php中OR与|| AND与&&的区别总结
2013/10/26 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
通过js脚本复制网页上的一个表格的不错实现方法
2006/12/29 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
javascript实现验证IP地址等相关信息代码
2015/05/10 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
Sahajan美国:阿育吠陀护肤品牌
2021/01/09 全球购物
求职简历自荐信
2013/10/20 职场文书
优秀公益广告词大全
2014/03/19 职场文书
安全生产月演讲稿
2014/05/09 职场文书
物业消防安全责任书
2014/07/23 职场文书
护士先进个人总结
2015/02/13 职场文书
法律意见书范文
2015/05/20 职场文书
调解书格式范本
2015/05/20 职场文书
家长会感言
2015/08/01 职场文书