为什么在Apple的Safari Developer Library中,他们在附加事件监听器时会使用匿名函数?

时间:2011-04-29 15:38:16

标签: javascript html5 webkit

所有

我对JavaScript开发很陌生,所以这可能是一个非常愚蠢的问题。

但是,我正在阅读Apple的Safari开发者库,我注意到他们在附加eventListeners时使用“匿名函数”:

this.element.addEventListener('touchstart', function(e) { return self.onTouchStart(e) }, false);

这有什么不同之处:

this.element.addEventListener('touchstart', onTouchStart, false);

假设它不同,怎么样?如果不是,他们为什么要使用这种方法?

以下是我所指的文件的链接:

Safari Developer Guide - Interactive Visual Effects

一些澄清......

我理解这样做的好处:

this.element.addEventListener('touchstart', function(e) { alert("touched")}, false);

在此......

this.element.addEventListener('touchstart', onTouchStart, false);
function onTouchStart(e) {
    alert("touched");
}

在这种情况下,您已经保存了创建“永久”命名函数。

但是,在Apple的情况下,名为“onTouchStart”的函数是一种永久的命名函数。那么,还有一个好处吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

只要您不需要访问“self”对象的任何成员或提供任何其他参数,您的工作方式就可以正常工作。通常,你这样做,所以他们使用的技术创建了一个闭包,它将允许你访问局部变量(例如“self”,它通常只是对调用函数中“this”的引用)

答案 1 :(得分:0)

这是一个非常简单的功能,只需做一件事就不会在其他任何地方使用。在没有必要时,根本不需要命名。如果不这样做,代码更简洁,更简单,尽管两种方法都是等效的。确切地说,第一个与:

相同
function onTouchStart(e) {
    return self.onTouchStart(e);
}
this.element.addEventListener('touchstart', onTouchStart, false);