JavaScript中消除闭包的一般方法介绍_javascript技巧
程序员文章站
2022-04-24 10:44:47
...
JavaScript 的闭包是一个其主动发展的特性, 也是一个被动发展的特性. 也就是说, 一方面, JS 有了闭包能更好解决一些问题. 另一方面, JS 为了解决某些问题, 而不得不使用闭包勉强来解决问题.
class Class{
function init(){
this.n = 0;
}
function func(){
this.n ++;
return this.n;
}
}
var obj = new Class();
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();
前者这里不讨论, 如果 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();
因为后者的可扩展性更好. 当你需要实现对一个变量的不同操作时, 后一种可以只需要再定义一个不同的函数(也就是简单线性扩展), 而前一种(闭包)则需要完全重写(这就是为什么你经常听到重构这个词的原因).
上一篇: PHP开发工程师的知识架构
推荐阅读
-
json中换行符的处理方法示例介绍_javascript技巧
-
JavaScript中的作用域链和闭包_javascript技巧
-
JavaScript中的闭包(Closure)详细介绍_javascript技巧
-
JavaScript中的作用域链和闭包_javascript技巧
-
用js闭包的方法实现多点标注冒泡示例_javascript技巧
-
JavaScript中的闭包原理分析_javascript技巧
-
js中函数调用的两种常用方法使用介绍_javascript技巧
-
JavaScript中遍历对象的property的3种方法介绍_javascript技巧
-
JavaScript中消除闭包的一般方法介绍_javascript技巧
-
JS中令人发指的valueOf方法介绍_javascript技巧