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 相关文章推荐
解析Jquery取得iframe中元素的几种方法
Jul 04 Javascript
jquery退出each循环的写法
Feb 26 Javascript
JavaScript判断变量是否为空的自定义函数分享
Jan 31 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
Nov 17 Javascript
JavaScript制作颜色反转小游戏
Sep 25 Javascript
JavaScript获取ul中li个数的方法
Feb 13 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
Dec 25 Javascript
Angular2.0实现modal对话框的方法示例
Feb 18 Javascript
详解使用angular框架离线你的应用(pwa指南)
Jan 31 Javascript
vue实现分页栏效果
Jun 28 Javascript
微信小程序 确认框的实现(附代码)
Jul 23 Javascript
Ajax实现异步加载数据
Nov 17 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
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
php数组和链表的区别总结
2019/09/20 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
js模拟点击事件实现代码
2012/11/06 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
js原型继承的两种方法对比介绍
2014/03/30 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
js时间查询插件使用详解
2017/04/07 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
在vue项目中promise解决回调地狱和并发请求的问题
2020/11/09 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
2020/11/24 Python
Python实现随机爬山算法
2021/01/29 Python
python解包用法详解
2021/02/17 Python
Bibloo奥地利:购买女装、男装、童装、鞋和配件
2018/10/18 全球购物
说出一些常用的类,包,接口
2014/09/22 面试题
区域销售经理岗位职责
2013/12/10 职场文书
大三预备党员入党思想汇报
2014/01/08 职场文书
销售岗位职责范本
2014/06/12 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
如何写早恋检讨书
2014/09/10 职场文书
四风查摆剖析材料
2014/10/10 职场文书
2014幼儿园教育教学工作总结
2014/12/17 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
Qt自定义Plot实现曲线绘制的详细过程
2021/11/02 Python