JavaScript中'function(event)'的含义是什么?

4
我不知道“function(event)”这句话的意思。
Event.add(apple,'click',function(event) {
    Event.stopPropagation(event);
});

“event”这个参数难道不是JavaScript的唯一关键字吗?

某些函数的参数可以是关键字吗?

我理解下面代码的意思:

function(test) {
alert(test);
}

但我不理解这个:

function(event)...

有人能给我解释一下吗?
这段代码是一个JavaScript函数,其中的“event”是一个参数。在函数内部,可以使用该参数来访问与事件相关的信息。

1
正如您在此处看到的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Lexical_grammar,在 JavaScript 语法中,event 不是保留字。 - pfooti
在这种情况下,作为第三个参数传递到 Event.add 的函数被称为事件处理程序 - 当相应的事件(此处为 click)发生时,它将被调用,并且事件对象本身将用作其第一个参数。从纯技术角度来看,使用什么名称并不重要。但出于可读性的考虑,在这里使用 event 很重要。 - raina77ow
5个回答

5

事件对象总是被传递给处理程序,并包含许多有用的信息,说明发生了什么。

不同类型的事件提供不同的属性。例如,onclick 事件对象包含:

  • event.target - 被点击元素的引用。IE 使用 event.srcElement 替代。
  • event.clientX / event.clientY - 单击时指针的坐标。

还有关于哪个按钮被点击以及其他属性的信息。 请访问此链接。 它以非常简单的方式回答了您所有的问题。

来源:http://javascript.info/tutorial/obtaining-event-object

示例:

如果在 HTML 中分配了以下事件,则会触发:

<button onclick="alert(event)">See the event</button>

那么

function alert(event) {
    // event.type contains whether this event was invoked in the result of a click etc
    // event.target would contain the reference to the element which invoked this method/event
}

起初我只提供了直接链接,但后来我也使用该链接的示例进行了解释。这有什么问题吗? - Nofel Mahmood
你应该将复制的文本放入一个块引用中,并声明链接是来源,以使其更加清晰明了。 - Josh Crozier
哦,我的错!我现在会做的 :) 谢谢 Josh 指出。 - Nofel Mahmood

1

这是一个匿名函数,即没有名称的函数,它发送事件对象。该对象包含有关事件本身的信息。它始终作为第一个对象/变量传递。


0

这是定义一个匿名函数对象的代码:

function foo(bar) { ... }

功能上类似于:

var foo = function (bar) { ... };

除了第一种情况中,名称foo和函数对象的创建和赋值被提升到作用域顶部以外,在第二种情况中只有名称foo被提升; foo在赋值执行之前不会保持函数。

实际上,您发布的代码正在调用Event.add()并将函数作为第三个参数传递给它,但是与其提前声明函数,它是在内联方式下创建函数对象。

在您的问题中编写代码块的另一种方法是:

function handler(event) {
    Event.stopPropagation(event);
}

Event.add(apple, 'click', handler);

除了你问题中的代码没有引入 handler 名称。


请注意,没有名为Event.stopPropagation()的方法。但是,event对象将具有stopPropagation(),因此大写字母E可能是一个打字错误。很可能意图是使用function (event) { event.stopPropagation(); }

0

event只是一个变量,它被传递给事件监听器函数,例如Event.addelement.on。它不是保留字(尽管Event是保留字,这就是为什么你可以使用Event.add),你可以随意命名。

event参数用于传递有关已发生事件的信息(在此示例中,即单击apple),可以用于检索有关事件的数据或操作它。


function(){...} 是一个匿名函数,这意味着您不需要给它命名,只需在内联中声明即可,该函数将作为参数传递,就像您说的那样。

function foo (event) {
    ...
}
Event.add(apple, "click", foo);

但你不需要事先声明它。这样做的缺点是无法复制,例如在清除事件处理程序时。


0
看一下事件变量,你们就都会明白的 :)
function (event) {
  console.log({ event });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接