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 相关文章推荐
js 多种变量定义(对象直接量,数组直接量和函数直接量)
May 24 Javascript
基于jquery的bankInput银行卡账号格式化
Aug 22 Javascript
javascript利用apply和arguments复用方法
Nov 25 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
Aug 19 Javascript
JS获取IMG图片高宽的简单实例
May 17 Javascript
js基于cookie方式记住返回页面用法示例
May 27 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
Feb 19 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
Jun 01 Javascript
select自定义小三角样式代码(实用总结)
Aug 18 Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
Dec 19 Javascript
利用React Router4实现的服务端直出渲染(SSR)
Jan 07 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
Look And Say 序列php实现代码
2011/05/22 PHP
php模拟用户自动在qq空间发表文章的方法
2015/01/07 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
php注册登录系统简化版
2020/12/28 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
详解微信小程序轨迹回放实现及遇到的坑
2021/02/02 Javascript
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
Python的条件表达式和lambda表达式实例
2019/01/31 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Django和Flask框架优缺点对比
2019/10/24 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
数据库面试要点基本概念
2013/10/31 面试题
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
如何利用pygame实现打飞机小游戏
2021/05/30 Python
mysql脏页是什么
2021/07/26 MySQL