javascript - 为什么在 Apple 的 Safari Developer Library 中,他们在附加 eventsListeners 时使用匿名函数?

标签 javascript html 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”的函数是一个永久性的命名函数。那么,还有好处吗?

提前致谢!

最佳答案

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

关于javascript - 为什么在 Apple 的 Safari Developer Library 中,他们在附加 eventsListeners 时使用匿名函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5834138/

相关文章:

javascript - 如何在 Cocoa/WebKit 应用程序中从 Javascript 调用 Objective-C 方法?

javascript - D3 条形图上的线条注释

php - 在 PHP 提交的表单中包含 JavaScript 验证

html - 链接里面的图片

javascript - onclick 不是调用函数

google-chrome - Windows下如何在node-webkit中强制硬件加速视频解码?

javascript - 最小/最大和开始/结束不能一起工作

javascript - 应用上下文时出错 TypeError : Cannot read property 'getReferences' of null Error

html - 记住密码在 ff 中有效,但在 ie 和 chrome 中无效

css - @-webkit-keyframes 使用带旋转的-webkit-transform 闪烁