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 prototype,executing,context,closure
Dec 24 Javascript
js实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
jquery判断元素是否隐藏的多种方法
May 06 Javascript
angularjs创建弹出框实现拖动效果
Aug 25 Javascript
JS实现环形进度条(从0到100%)效果
Jul 05 Javascript
JS实现浏览器打印、打印预览示例
Feb 28 Javascript
Vuejs+vue-router打包+Nginx配置的实例
Sep 20 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
Dec 13 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
VUE 自定义组件模板的方法详解
Aug 30 Javascript
微信小程序页面调用自定义组件内的事件详解
Sep 12 Javascript
Vue scoped及deep使用方法解析
Aug 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 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
执行iframe中的javascript方法
2008/10/07 Javascript
js DOM模型操作
2009/12/28 Javascript
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
JavaScript 小型打飞机游戏实现原理说明
2010/10/28 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
Mac 上切换Python多版本
2017/06/17 Python
python执行使用shell命令方法分享
2017/11/08 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
python palywright库基本使用
2021/01/21 Python
HTML页面中添加Canvas标签示例
2015/01/01 HTML / CSS
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
电子商务专业学生的自我鉴定
2013/11/28 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
村道德模范事迹材料
2014/08/28 职场文书
中学生自我评价范文
2015/03/03 职场文书
2015迎新晚会活动总结
2015/07/16 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
表扬信范文
2019/04/22 职场文书