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 相关文章推荐
javascript function、指针及内置对象
Feb 19 Javascript
HTML代码中标签的全部属性 中文注释说明
Mar 26 Javascript
关于javascript document.createDocumentFragment()
Apr 04 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
一个简单的动态加载js和css的jquery代码
Sep 01 Javascript
jquery操作select方法汇总
Feb 05 Javascript
bootstrap vue.js实现tab效果
Feb 07 Javascript
基于bootstrap页面渲染的问题解决方法
Aug 09 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
Nov 22 Javascript
element-ui组件table实现自定义筛选功能的示例代码
Mar 15 Javascript
基于JavaScript实现大文件上传后端代码实例
Aug 18 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
让你的网站首页自动选择语言转跳
2006/12/06 PHP
两个开源的Php输出Excel文件类
2010/02/08 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
php调用Google translate_tts api实现代码
2013/08/07 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
IE8 原生JSON支持
2009/04/13 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
node.js的事件机制
2017/02/08 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
vue-router的hooks用法详解
2020/06/08 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
Python下Fabric的简单部署方法
2015/07/14 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python数据结构学习之实现线性表的顺序
2018/09/28 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
阿拉伯世界最大的电子商务网站:Souq沙特阿拉伯
2016/10/28 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
2014年自我评价
2014/01/04 职场文书
公司任命书模板
2014/06/06 职场文书
2014年底工作总结
2014/12/15 职场文书