JavaScript 清除闭包

快乐打工仔 分类:实例代码

闭包在JavaScript中是一个很重要的概念,本文不做介绍。

具体可以参阅JavaScript 闭包一章节。 

闭包虽然是一个利器,但是也有弊端,本文同样不做介绍,下面直接进入正题。

例如"变量只初始化一次"这样的需求,在常规的语言中可以使用如下方式:

class Class{
 function init(){
   this.n = 0;
 }
 function func(){
   this.n ++;
   return this.n;
  }
}
var obj = new Class();

js通常则需要使用闭包来解决此问题:

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

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

网站出售中,有意者加微信:javadudu

回复

我来回复
  • 暂无回复内容