打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
idea's blog
2014-11-16


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();

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python高级编程技巧
整理了70个Python面向对象编程案例,建议收藏!
Javascript中函数调用和this的关系
javascript 面向对象编程
解决ECShop transport.js与jQuery冲突之个人实战
关于 class helper for ... 语法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服