javascript中运用闭包和自执行函数解决大量的全局变量问题


Posted in Javascript onDecember 30, 2010

但是从全局看来,这样会导致出现一些让我们难以掌控的情况的出现:变量同名、多个函数共用一个全局变量后的值的变换……等等。所以,有时候,对于一些简单的全局变量,我们可以通过另一种方式来处理——用自执行函数+闭包的方法来解:

比如:我们要在网页加载时给出一个提示,在网页关闭时给出另一个提示
下面的代码,实现了以上功能

var msg1 = "欢迎光临!"; // 定义一个全局变量 
var msg2 = "再见!" //定了另一个全局变量 
window.onload = function() { 
alert(msg1); 
} 
window.onunload = function() { 

alert(msg2); 
}

这段代码中已经用到了两个全局变量。而只是为了实现一个简小的功能。
而且,全局变量太多,我们必须记住:msg1是欢迎时的变量,msg2是关闭时变量……如果变量更多,我们还能记得住吗?

下面是同样的功能,不过运用了自执行函数+闭包方法:

(function() { 
var msg = "Hello, world!"; 

window.onload = function() { 


alert(msg); 

} 
})(); 
(function() { 

var msg = "Hello, world!"; 

window.onunload = function() { 


alert(msg); 

} 
})();

后者做法,虽然代码增长了,但是:
1)msg变量只在各自的自执行函数内有效。不会和其它全局变量之间产生混淆。
2)代码的结构变得更加的清晰。
3)解决了大量使用全局变量的情况。

以上只是本人的一点认识,希望真正的高手给出点评!

Javascript 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
让回调函数 showResponse 也带上参数的代码
Aug 13 Javascript
javascript学习笔记(七) js函数介绍
Jun 19 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
Jan 17 Javascript
js中回调函数的学习笔记
Jul 31 Javascript
Js为表单动态添加节点内容的方法
Feb 10 Javascript
jQuery实现简单的列表式导航菜单效果代码
Aug 31 Javascript
AngularJS入门教程之XHR和依赖注入详解
Aug 18 Javascript
同步异步动态引入js文件的几种方法总结
Sep 23 Javascript
AngularJS自定义插件实现网站用户引导功能示例
Nov 07 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
Aug 09 jQuery
vuex(vue状态管理)的特殊应用案例分享
Mar 03 Javascript
javascript中创建对象的三种常用方法
Dec 30 #Javascript
javascript 闭包疑问
Dec 30 #Javascript
javascript数字数组去重复项的实现代码
Dec 30 #Javascript
ExtJs的Date格式字符代码
Dec 30 #Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 #Javascript
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
Dec 30 #Javascript
在VS2008中使用jQuery智能感应的方法
Dec 30 #Javascript
You might like
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
php实现按照权重随机排序数据的方法
2015/01/09 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
BootStrap响应式导航条实例介绍
2016/05/06 Javascript
BootStrap中
2016/12/10 Javascript
js中setTimeout的妙用--防止循环超时
2017/03/06 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
js new Date()实例测试
2019/10/31 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
python实现折半查找和归并排序算法
2017/04/14 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
python实现连连看游戏
2020/02/14 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
python程序需要编译吗
2020/06/19 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
大学新生军训个人的自我评价
2013/10/03 职场文书
培训演讲稿范文
2014/01/12 职场文书
学生周末长期请假条
2014/02/15 职场文书
法定代表人授权委托书
2014/04/04 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
设计顾问服务计划书
2014/05/04 职场文书
党员剖析材料范文
2014/09/30 职场文书
员工聘用合同范本
2015/09/21 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
详解Redis主从复制实践
2021/05/19 Redis
vue实现列表垂直无缝滚动
2022/04/08 Vue.js