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 相关文章推荐
基于jQuery实现的当离开页面时出现提示的实现代码
Jun 27 Javascript
js/ajax跨越访问-jsonp的原理和实例(javascript和jquery实现代码)
Dec 27 Javascript
在jQuery中 常用的选择器介绍
Apr 16 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
Apr 21 Javascript
最原始的jQuery注册验证方式
Oct 11 Javascript
JavaScript 实现的checkbox经典实例分享
Oct 16 Javascript
vue-resource 拦截器(interceptor)的使用详解
Jul 04 Javascript
JavaScript基础之流程控制语句的用法
Aug 31 Javascript
vue mixins组件复用的几种方式(小结)
Sep 06 Javascript
打字效果动画的4种实现方法(超简单)
Oct 18 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
Sep 29 Javascript
JS集合set类的实现与使用方法示例
Feb 01 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
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
Web程序工作原理详解
2014/12/25 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
实现PHP搜索加分页
2016/10/12 PHP
JavaScript 拾漏补遗
2009/12/27 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
探究JavaScript函数式编程的乐趣
2015/12/14 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
Nuxt配合Node在实际生产中的应用详解
2018/08/07 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
vue集成openlayers加载geojson并实现点击弹窗教程
2020/09/24 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
Python程序设计入门(1)基本语法简介
2014/06/13 Python
python的绘图工具matplotlib使用实例
2014/07/03 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
完美解决Pycharm无法导入包的问题 Unresolved reference
2018/05/18 Python
python将时分秒转换成秒的实例
2019/12/07 Python
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
自我评价的正确写法
2013/09/19 职场文书
成人大专自我鉴定范文
2013/10/19 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
2014年医院后勤工作总结
2014/12/06 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
趣味运动会加油词
2015/07/18 职场文书
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis