关于document.addEventListener的新手问题('mousemove',function(e){

时间:2011-05-08 20:47:34

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

好:

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

最近我意识到我可以通过Chrome扩展程序大大增强与少数网站的互动,以重新排序和重写网站以满足我的需求。

所以,我一直在努力掌握chrome扩展,javascript,css,dom,jquery和HTML。这是一个很大的主题,我对网络技术非常不熟悉。

有人可以在这种情况下解释'function(e){... code ...}'的内容吗?

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

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

3 个答案:

答案 0 :(得分:4)

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

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

您也可以使用(有时建议您提供可读性和清晰度):

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

如果您稍后决定删除eventlistener(removeEventListener),那么这也是首选方法。

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

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

答案 1 :(得分:1)

它们被称为匿名函数。

你可以在这里阅读更多关于它们的内容:

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

答案 2 :(得分:1)

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

然而,在这种特殊情况下,如果匿名添加,则删除特定事件监听器是不可能的。