基于JavaScript 声明全局变量的三种方式详解


Posted in Javascript onMay 07, 2013

JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍。

声明方式一:

使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量。该方式即为显式声明详细如下:

<script> 
  var test = 5;//全局变量 
  function a(){ 
    var a = 3;//局部变量 
    alert(a); 
  } 
  function b(){ 
    alert(test); 
  } 
  //a();//调用a方法,那么方法里面的内容才会执行 
  //b();//同上 
</script>

声明方式二:

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

<script> 
    test = 5;//全局变量 
    function a(){ 
      aa = 3;//也是全局变量 
      alert(test); 
    } 
    //a();  //输出5 
    //alert(aa);//这里也可以方法a()方法里面的变量,因为aa是全局变量 
  </script>

声明方式三:

使用window全局对象来声明,全局对象的属性对应也是全局变量,详细如下:

<script> 
  window.test = 50; 
  alert(test);//输出50 
</script>

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

window.jQuery = window.$ = jQuery;

全局变量的优点:

可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗。

全局变量的缺点:

(1)全局变量保存在静态存贮区,程序开始运行时为其分配内存,程序结束释放该内存。与局部变量的动态分配、动态释放相比,生存期比较长,因此过多的全局变量会占用较多的内存单元。

(2)全局变量破坏了函数的封装性能。函数象一个黑匣子,一般是通过函数参数和返回值进行输入输出,函数内部实现相对独立。但函数中如果使用了全局变量,那么函数体内的语句就可以绕过函数参数和返回值进行存取,这种情况破坏了函数的独立性,使函数对全局变量产生依赖。同时,也降低了该函数的可移植性。

(3)全局变量使函数的代码可读性降低。由于多个函数都可能使用全局变量,函数执行时全局变量的值可能随时发生变化,对于程序的查错和调试都非常不利。
因此,如果不是万不得已,最好不要使用全局变量。

Javascript 相关文章推荐
firefox插件Firebug的使用教程
Jan 02 Javascript
JavaScript prototype对象的属性说明
Mar 13 Javascript
js注意img图片的onerror事件的分析
Jan 01 Javascript
jquery的键盘事件修改代码
Feb 24 Javascript
使用非html5实现js板连连看游戏示例代码
Sep 22 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
Dec 31 Javascript
利用原生JS自动生成文章标题树的实例
Aug 22 Javascript
JavaScript 对象详细整理总结
Sep 29 Javascript
fullCalendar中文API官方文档
Feb 07 Javascript
vue 实现axios拦截、页面跳转和token 验证
Jul 17 Javascript
新手简单了解vue
May 29 Javascript
vue中实现Monaco Editor自定义提示功能
Jul 05 Javascript
你必须知道的JavaScript 变量命名规则详解
May 07 #Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
May 07 #Javascript
基于JavaScript实现继承机制之构造函数方法对象冒充的使用详解
May 07 #Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 #Javascript
JS中的substring和substr函数的区别说明
May 07 #Javascript
js图片自动切换效果处理代码
May 07 #Javascript
JavaScript通过RegExp实现客户端验证处理程序
May 07 #Javascript
You might like
php 防止单引号,双引号在接受页面转义
2008/07/10 PHP
phpMyadmin 用户权限中英对照
2010/04/02 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
php array_map使用自定义的函数处理数组中的每个值
2016/10/26 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
简单实现jQuery轮播效果
2017/08/18 jQuery
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
python多线程扫描端口示例
2014/01/16 Python
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
Python进程间通信Queue实例解析
2018/01/25 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
Python库安装速度过慢解决方案
2020/07/14 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
如何选择使用结构还是类
2014/05/30 面试题
Linux操作面试题
2015/02/11 面试题
企业办公室主任岗位职责
2014/02/19 职场文书
我的长生果教学反思
2014/04/28 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
领导班子对照检查材料
2014/09/22 职场文书
电影雷锋观后感
2015/06/10 职场文书
初中语文教学随笔
2015/08/15 职场文书