- 闭包对于浏览器的内存来说是否太糟糕了?
- 在 JavaScript 中使用 bind 避免闭包是一个好方法吗?
现有代码:
var oControl = new Control({
var self = this;
click: function(e){ //closure that's accessing self var
self.performAction();
}
});
我被告知要避免编写如上所示的代码。给出的原因 - 在上面的代码中创建了一个闭包。有人建议我使用绑定来克服上述问题。
修改后的代码:
var oControl = new Control({
var self = this;
click: function(e){ //Not a closure
this.performAction(); //Is this more readable?
}.bind(self)
});
我不太确定修改后的代码是否更具可读性。不知何故,我觉得这在某种程度上被污染了。也许有更好的方法来避免关闭?但是,真的有必要从一开始就避免它们吗?
我建议这样:
var oControl = new Control({
click: this.performAction.bind(this)
});
您的代码中似乎没有理由self
变量,如果单击处理程序只是要调用您的其他方法,那么您也可以使用.bind()
没有包装函数。
FYI, .bind()
创建一个闭包本身所以不要认为使用.bind()
正在消除闭包。它使您无需手动编写闭包变量,这使得它易于使用并使您的代码看起来更干净。
至于你的其他问题:
- 闭包对于浏览器的内存来说是否太糟糕了?
闭包确实会使用一些额外的内存。除非你有无数的内存,否则额外的内存可能并不重要。和,.bind()
可能还在其实现中使用了闭包(this
指针必须存储在某处)。
- 在 JavaScript 中使用 bind 避免闭包是一个好方法吗?
.bind()
非常有用,当它满足您的目的时,您应该随意使用它。是否将第一个代码块与您自己的闭包变量一起使用,将第二个代码块与包装函数一起使用.bind()
或者我的建议很大程度上是关于编码风格的意见和对实现简洁性的意见。一切都可以正常工作,并且在性能或内存使用方面不太可能出现有意义的差异。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)