基于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 相关文章推荐
在textarea文本域中显示HTML代码的方法
Mar 06 Javascript
js中关于String对象的replace使用详解
May 24 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
Jan 29 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
JQuery获取样式中的background-color颜色值的问题
Aug 20 Javascript
浅谈在koa2中实现页面渲染的全局数据
Oct 09 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
Apr 12 jQuery
vue单页开发父子组件传值思路详解
May 18 Javascript
原生JS实现的自动轮播图功能详解
Dec 28 Javascript
vuex 实现getter值赋值给vue组件里的data示例
Nov 05 Javascript
Vue如何基于es6导入外部js文件
May 15 Javascript
微信小程序实现购物车小功能
Dec 30 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 采集程序中常用的函数
2009/12/09 PHP
php microtime获取浮点的时间戳
2010/02/21 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
PHP内核探索之解释器的执行过程
2015/12/22 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
2017/06/28 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
浅谈javascript中的作用域
2012/04/07 Javascript
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
jquery实现metro效果示例代码
2013/09/06 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
js中日期的加减法
2015/05/06 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
Python文件的读写和异常代码示例
2017/10/31 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
wxPython实现文本框基础组件
2019/11/18 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
自我鉴定范文200字
2013/10/02 职场文书
卫校毕业生自我鉴定
2013/10/31 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang