基于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 相关文章推荐
IE下JS读取xml文件示例代码
Aug 05 Javascript
jQuery中:first-child选择器用法实例
Dec 31 Javascript
浅谈Sizzle的“编译原理”
Apr 14 Javascript
jquery+css实现动感的图片切换效果
Nov 25 Javascript
JavaScript Date对象详解
Mar 01 Javascript
不能不知道的10个angularjs英文学习网站
Mar 23 Javascript
微信开发 微信授权详解
Oct 21 Javascript
jquery-mobile基础属性与用法详解
Nov 23 Javascript
jQuery实现base64前台加密解密功能详解
Aug 29 jQuery
AngularJS 控制器 controller的详解
Oct 17 Javascript
详解Node.js一行命令上传本地文件到服务器
Apr 22 Javascript
layer弹出层倒计时关闭的实现方法
Sep 27 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基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
javascript读取xml
2006/11/04 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
javascript 正则表达式相关应介绍
2012/11/27 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
Windows8下搭建Node.js开发环境教程
2014/09/03 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
js兼容火狐获取图片宽和高的方法
2015/05/21 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
pageGroup.js实现分页功能
2019/07/27 Javascript
windows下安装python paramiko模块的代码
2013/02/10 Python
python中pass语句用法实例分析
2015/04/30 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
Python 判断奇数偶数的方法
2018/12/20 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
Html5自定义字体解决方法
2019/10/09 HTML / CSS
Monnier Frères美国官网:法国知名奢侈品网站
2016/11/22 全球购物
美国第一香水网站:Perfume.com
2017/01/23 全球购物
保险公司晨会主持词
2014/03/22 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js