JavaScript 闭包在封装函数时的简单分析


Posted in Javascript onNovember 28, 2009

wbkt2t最近发现了一个新名词:闭包。(自己落后了,要好好学习才行),baidu、google看了一下原理和实例,也明白了闭包的强大。JQuery也把闭包发扬光大了,网上一些个人开发的框架都是用了闭包了功能。知道了闭包的原理和使用发放,于是自己小小试验了一把,带着疑惑:使用闭包有什么好处?不使用会出现什么后果?写下了以下代码,也希望大家给小弟一些解答
使用闭包:
实例1

var $Darren; 
(function(){ 
var Obj={version:"1.0",author:"Darren"}; 
Obj.Add=function(arg1,arg2){ 
return (arg1+arg2); 
} 
Obj.Multi=function(arg1,arg2){ 
return (arg1*arg2); 
} 
$Darren=Obj; 
})(); //匿名函数,并使其马上执行 
alert($Darren.Add(6,2)); //结果 8 
alert($Darren.Multi(3,5)); //结果15

不使用闭包代码:
实例2
var $Darren2={version:"1.0",author:"Darren"}; 
$Darren2.Add=function(arg1,arg2){ 
return (arg1+arg2); 
} 
$Darren2.Multi=function(arg1,arg2){ 
return (arg1*arg2); 
} 
alert($Darren2.Add(6,2)); //结果 8 
alert($Darren2.Multi(3,5)); //结果15

我的理解是:
.使用闭包后可以防止命名冲突,如在实例1中,如果$Darren变量冲突只需改两处地方,而在实例2中,如果$Darren2变量冲突则需该多处(这里是3处)
.使用闭包后,即使匿名函数执行完毕,但是还可以使用其内部的函数。

还有我有个疑惑就是:
为什么大家都推荐实例1的写法,实例1和实例2哪个更好,为什么?一样能实现的功能。

希望大家指点小弟,这样理解对不对?
还有什么补充的。
谢谢大家~~~

Javascript 相关文章推荐
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
Jan 02 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 Javascript
javascript实用方法总结
Feb 06 Javascript
AngularJs学习第八篇 过滤器filter创建
Jun 08 Javascript
vue.js指令v-for使用及索引获取
Nov 03 Javascript
利用vscode编写vue的简单配置详解
Jun 17 Javascript
vue-cli构建项目下使用微信分享功能
May 28 Javascript
Bootstrap-table自定义可编辑每页显示记录数
Sep 07 Javascript
js对象简介与基本用法示例
Mar 13 Javascript
javascript实现贪吃蛇小练习
Jul 05 Javascript
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 Javascript
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
Nov 27 #Javascript
Javascript 复制数组实现代码
Nov 26 #Javascript
js setattribute批量设置css样式
Nov 26 #Javascript
Javascript 二维数组
Nov 26 #Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 #Javascript
Exitjs获取DataView中图片文件名
Nov 26 #Javascript
网页中的图片的处理方法与代码
Nov 26 #Javascript
You might like
php页面函数设置超时限制的方法
2014/12/01 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
JS获取图片实际宽高及根据图片大小进行自适应
2013/08/11 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
Element Input组件分析小结
2018/10/11 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
layui动态表头的实现代码
2019/08/22 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
Python中的引用知识点总结
2019/05/20 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
Python任务调度利器之APScheduler详解
2020/04/02 Python
python能否java成为主流语言吗
2020/06/22 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
如何估计一张表的大小(假设该表中有1万条数据)
2016/03/27 面试题
linux面试相关问题
2013/04/28 面试题
计算机毕业大学生推荐信
2013/12/01 职场文书
学生自我鉴定模板
2013/12/30 职场文书
经贸日语专业个人求职信范文
2014/04/29 职场文书
行政求职信
2014/07/04 职场文书
2014年副班长工作总结
2014/12/10 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
Python实现滑雪小游戏
2021/09/25 Python
Python加密技术之RSA加密解密的实现
2022/04/08 Python
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技