【问题标题】:Newbie question about document.addEventListener('mousemove', function (e) {关于 document.addEventListener('mousemove', function (e) {
【发布时间】:2011-08-21 06:40:31
【问题描述】:

好的:

document.addEventListener('mousemove', function (e) {...code...}, false);

最近我意识到,通过 Chrome 扩展程序重新排序和重写网站以满足我的需要,我可以极大地增强我与一些网站的交互。

所以,我一直在尝试掌握 chrome 扩展、javascript、css、dom、jquery 和 HTML。这是一个庞大的主题,我对网络技术非常陌生。

谁能解释一下在这种情况下'function(e){...code...}' 是什么?

它是一个没有名字的内联函数?那么,与其他语言不同的是,该语句不是使用名称创建函数然后在需要时调用它,而是将 mousemove 与未命名的函数挂钩?

我想问拥有内联未命名函数有什么好处是一个愚蠢的问题?

【问题讨论】:

    标签: javascript dom google-chrome google-chrome-extension


    【解决方案1】:

    function (e) {...code...} 是对在mousemove 事件发生时运行的匿名函数的引用。 e 参数是与事件本身一起发送的事件对象。

    所以基本上你会说:每当有人在 DOM 对象document 的某个地方移动鼠标时,使用我在该函数的参数中给你的事件对象执行函数。

    您也可以使用(有时为了可读性和清晰性建议这样做):

    function mousemover(e){ ... }
    document.addEventListener('mousemove', mousemover, false);
    

    如果您稍后决定删除事件监听器 (removeEventListener),这也是首选方式。

    内联匿名函数有时称为 lambda 函数。您可以在this SO Question 中了解它。

    根据 cmets 中的请求:在 javascript 中,函数是 第一类对象。具体来说,这意味着该语言支持将函数作为参数传递给其他函数,将它们作为来自其他函数的值返回,并将它们分配给变量或将它们存储在数据结构中(引自this wikipedia page)。另请阅读Douglas Crockfords page 的更多信息。

    【讨论】:

    • 很好的答案,但我认为将更多的注意力集中在 js 中的函数是一流对象这一事实上会有所帮助,因为这是我认为 OP 难以掌握的东西,而不是匿名函数(这是一个非常微不足道的概念)
    • 太棒了!谢谢 serg 和 Kooilnc!
    【解决方案2】:

    内联(匿名)函数只是一种风格,允许更短的代码。他们还可以通过在当前作用域中引入不需要的名称来避免污染命名空间。

    但是,在这种特殊情况下,如果匿名添加特定事件侦听器,则无法删除它。

    【讨论】:

    • 好吧,主要是我当时的想法。我想。
    • 是的,它们大多只在内联函数很短的时候使用。
    • 所以任何可能占用资源的严重代码几乎都不会被内联,对吧?
    【解决方案3】:

    它们被称为匿名函数。

    您可以在这里阅读更多关于它们的信息:

    http://en.wikipedia.org/wiki/Anonymous_function#JavaScript

    【讨论】:

    • 哈哈,我以为我会访问每个 javascript 网站,但我错过了 :)
    • 其实,真的很棒。我对 Delphi 很熟悉,但我没有将 Delphi 的匿名程序与看起来很奇怪的 javascript 函数(e)联系起来。
    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2020-11-04
    • 2019-02-05
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多