JavaScript中消除闭包的一般方法介绍


Posted in Javascript onMarch 16, 2015

JavaScript 的闭包是一个其主动发展的特性, 也是一个被动发展的特性. 也就是说, 一方面, JS 有了闭包能更好解决一些问题. 另一方面, JS 为了解决某些问题, 而不得不使用闭包勉强来解决问题.

前者这里不讨论, 如果 JS 闭包能更好的解决问题, 当然使用闭包更好.

我讨论的是后者, 是因为 JS 本身的限制, 而不得不磕磕绊绊地用闭包来解决的问题, 例如"变量只初始化一次"这样的需求.

常规的语言这样解决:

class Class{

 function init(){

  this.n = 0;

 }

 function func(){

  this.n ++;

  return this.n;

 }

}

var obj = new Class();

JavaScript 一般会这样解决(使用闭包):

var obj = {

 func : (function(){

  var n = 0;

  return function(){

   n ++;

   return n;

  }

 })()

}

但我更建议采用这种方法(消除闭包):

function Class(){

 var self = this;

 self.n = 0;

 self.func = function(){

  self.n ++;

  return self.n;

 }

}

var obj = new Class();

因为后者的可扩展性更好. 当你需要实现对一个变量的不同操作时, 后一种可以只需要再定义一个不同的函数(也就是简单线性扩展), 而前一种(闭包)则需要完全重写(这就是为什么你经常听到重构这个词的原因).

Javascript 相关文章推荐
有关于JS辅助函数inherit()的问题
Apr 07 Javascript
Javascript浅谈之引用类型
Dec 18 Javascript
javascript实现控制浏览器全屏
Mar 30 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
Oct 30 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
Dec 08 Javascript
jquery对象和DOM对象的相互转换详解
Oct 18 Javascript
Vue获取DOM元素样式和样式更改示例
Mar 07 Javascript
详解RequireJs官方使用教程
Oct 31 Javascript
vue2 设置router-view默认路径的实例
Sep 20 Javascript
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
Nov 04 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
jQuery实现的支持IE的html滑动条
Mar 16 #Javascript
JavaScript计算两个日期时间段内日期的方法
Mar 16 #Javascript
nw.js实现类似微信的聊天软件
Mar 16 #Javascript
JavaScript控制table某列不显示的方法
Mar 16 #Javascript
详解addEventListener的三个参数之useCapture
Mar 16 #Javascript
解决Jquery向页面append新元素之后事件的绑定问题
Mar 16 #Javascript
jquery中radio checked问题
Mar 16 #Javascript
You might like
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
php实现微信和支付宝支付的示例代码
2020/08/11 PHP
Add Formatted Text to a Word Document
2007/06/15 Javascript
ext读取两种结构的xml的代码
2008/11/05 Javascript
javascript Excel操作知识点
2009/04/24 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
AngularJS 与百度地图的结合实例
2016/10/20 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
使用Python的turtle模块画图的方法
2017/11/15 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
Pandas之缺失数据的实现
2021/01/06 Python
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
什么是servlet
2012/05/08 面试题
自我评价中英文语句
2013/11/30 职场文书
主题酒店策划书
2014/01/28 职场文书
寄语十八大感言
2014/02/07 职场文书
环卫工人节活动总结
2014/08/29 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
如何使用SQL Server语句创建表
2022/04/12 SQL Server