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 相关文章推荐
用ASP将SQL搜索出来的内容导出为TXT的代码
Jul 27 Javascript
Extjs4 GridPanel 的几种样式使用介绍
Apr 18 Javascript
简单的代码实现jquery定时器
Jan 03 Javascript
javascript工厂方式定义对象
Dec 26 Javascript
jQuery中filter()方法用法实例
Jan 06 Javascript
JQuery+EasyUI轻松实现步骤条效果
Feb 22 Javascript
Angular 4依赖注入学习教程之Injectable装饰器(六)
Jun 04 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
Jul 13 Javascript
基于vue2实现左滑删除功能
Nov 28 Javascript
基于Vuejs的搜索匹配功能实现方法
Mar 03 Javascript
JS严格模式原理与用法实例分析
Apr 27 Javascript
JS实现canvas简单小画板功能
Jun 23 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
php抓取https的内容的代码
2010/04/06 PHP
php关于array_multisort多维数组排序的使用说明
2011/01/04 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
PHP批量生成静态HTML的简单原理和方法
2014/04/20 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
javascript自启动函数的问题探讨
2013/10/05 Javascript
js特殊字符转义介绍
2013/11/05 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
jQuery的框架介绍
2016/05/11 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
详解KOA2如何手写中间件(装饰器模式)
2018/10/11 Javascript
JavaScript中的"=、==、==="区别讲解
2019/01/22 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
解决Vue watch里调用方法的坑
2020/11/07 Javascript
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
Python列表的切片实例讲解
2019/08/20 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
深入解析HTML5中的Blob对象的使用
2015/09/08 HTML / CSS
世界上最大的专业美容用品零售商:Sally Beauty
2017/07/02 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
C语言50道问题
2014/10/23 面试题
Linux如何修改文件和文件夹的权限
2012/06/27 面试题
财务会计自荐信范文
2014/02/21 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
吃空饷专项治理工作实施方案
2014/03/04 职场文书
法人委托书范本
2014/04/04 职场文书
求职信格式要求
2014/05/23 职场文书
妈妈活动方案
2014/08/15 职场文书