技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 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();

   因为后者的可扩展性更好. 当你需要实现对一个变量的不同操作时, 后一种可以只需要再定义一个不同的函数(也就是简单线性扩展), 而前一种(闭包)则需要完全重写(这就是为什么你经常听到重构这个词的原因).

建议继续学习:

  1. for 循环为何可恨?    (阅读:4340)
  2. 理解Javascript的闭包    (阅读:3746)
  3. GC与JS内存泄露    (阅读:3332)
  4. JavaScript的闭包问题    (阅读:3164)
  5. 闭包漫谈(从抽象代数及函数式编程角度)    (阅读:3065)
  6. 在回调和闭包中的内存泄漏    (阅读:2907)
  7. 什么是闭包(Closure)?    (阅读:2861)
  8. 前端代码之丑(一):分支化技巧    (阅读:2749)
  9. 闭包与作用域    (阅读:2696)
  10. 闭包漫谈(从抽象代数及函数式编程角度)    (阅读:2652)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1