您现在的位置:首页 --> JavaScript --> 消除JavaScript闭包的一般方法
消除JavaScript闭包的一般方法
浏览:1128次 出处信息
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();
因为后者的可扩展性更好. 当你需要实现对一个变量的不同操作时, 后一种可以只需要再定义一个不同的函数(也就是简单线性扩展), 而前一种(闭包)则需要完全重写(这就是为什么你经常听到重构这个词的原因).
建议继续学习:
- for 循环为何可恨? (阅读:4340)
- 理解Javascript的闭包 (阅读:3746)
- GC与JS内存泄露 (阅读:3332)
- JavaScript的闭包问题 (阅读:3164)
- 闭包漫谈(从抽象代数及函数式编程角度) (阅读:3065)
- 在回调和闭包中的内存泄漏 (阅读:2907)
- 什么是闭包(Closure)? (阅读:2861)
- 前端代码之丑(一):分支化技巧 (阅读:2749)
- 闭包与作用域 (阅读:2696)
- 闭包漫谈(从抽象代数及函数式编程角度) (阅读:2652)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:JavaScript实现的抛物线运动效果
后一篇:为什么++[[]][+[]]+[+[]]=10? >>
文章信息
- 作者:ideawu 来源: idea's blog
- 标签: 闭包
- 发布时间:2014-12-30 12:27:21
建议继续学习
近3天十大热文
- [182] 招聘技巧一二
- [15] Linux常用系统信息查看命令
- [13] 最近总结的一些技巧(vim,python,s
- [12] 在FreeNAS/BSD搭建基于Nginx+
- [12] 关于Linux的文件系统cache
- [12] Redis和Memcached的区别
- [11] 个人开公司的流程,以后用得着
- [10] 每个程序员都应该知道的8个Linux命令
- [10] 我对技术方向的一些反思
- [10] ps - 按进程消耗内存多少排序