在JavaScript中匿名方法的优点和缺点是什么?
问题描述:
在JavaScript中有很多不同的方法来设置一个方法,如按钮点击事件。在JavaScript中匿名方法的优点和缺点是什么?
例如说你retreived输入元件“按钮”
function MyForm(){
//anonymous method
button.click = function(){ //work };
//private method
var handleClick = function() { // work };
button.click = handleClick;
//public method
button.click = outerClickHandle;
}
//public
function outerClickHandle(){
// work
}
//prototype
MyForm.prototype.outerClickProto(){
//work
}
当然一些更明显的答案如封装的期望当存在。并且,对于原型而言,每次都不需要重新创建该功能,这对性能有好处,但对于匿名方法而言,除了作为一种好方法或写脚本的流程之外,什么是好的和坏的?
答
我发现的主要优点是,因为它是内联的,所以匿名函数可以访问范围内的所有当前局部变量,这在某些情况下可以极大地简化代码。一个典型的例子是setTimeout()
您希望它使用上面范围中定义的变量进行操作。
当然,匿名函数也不会干扰你所在的任何名称空间(全局的,局部的函数等等),因为它不需要名字。
与addEventListener(type,fn)事件处理函数一起使用匿名函数的一个缺点是,您不能仅删除该事件侦听器,因为您没有该函数的句柄。
关于命名空间的一个非常好的观点,我会牢记前进。 – tam 2012-02-03 05:09:30
匿名函数的另一个缺点是每次使用它的代码运行时都会创建一个新函数,在某些情况下它根本没有任何区别,但在其他情况下可能需要考虑性能方面的原因(例如,如果执行某些操作在一个循环中)。 – nnnnnn 2012-02-03 06:42:08
我会建议上面的答案被编辑,包括nnnnnn的提交,因为功能和相关闭包消耗的内存可以变得显着。匿名和私有方法分别为一个对象和一个共享执行环境(闭包)模式化。公共方法不创建函数对象,它使用为公共函数创建的函数对象。如果您打电话给MyForm一次,您将看不到差异,将其称为10,000次,您肯定会这样做。 – chuckj 2012-02-03 07:54:39