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 相关文章推荐
dojo 之基础篇(三)之向服务器发送数据
Mar 24 Javascript
很多人都是用下面的js刷新站IP和PV
Sep 05 Javascript
js过滤HTML标签完整实例
Nov 26 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
May 11 Javascript
Javascript中浏览器窗口的基本操作总结
Aug 18 Javascript
微信小程序的动画效果详解
Jan 18 Javascript
JavaScript编写九九乘法表(两种任选)
Feb 04 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
Apr 19 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
May 30 Javascript
js实现动态增加文件域表单功能
Oct 22 Javascript
JavaScript浅层克隆与深度克隆示例详解
Sep 01 Javascript
解决vue项目运行npm run serve报错的问题
Oct 26 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
js DataSet数据源处理代码
2010/03/29 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
谈谈Python中的while循环语句
2019/03/10 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
python把ipynb文件转换成pdf文件过程详解
2019/07/09 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
Python生成器next方法和send方法区别详解
2020/05/30 Python
canvas实现飞机打怪兽射击小游戏的示例代码
2018/07/09 HTML / CSS
Html5之title吸顶功能
2018/06/04 HTML / CSS
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
EJB的角色和三个对象
2015/12/31 面试题
专升本个人自我评价
2013/12/22 职场文书
婚前保证书范文
2015/02/28 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
gateway网关接口请求的校验方式
2021/07/15 Java/Android
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS