jQuery函数()和函数(事件)之间的区别

时间:2014-01-21 06:19:18

标签: javascript jquery

我是jQuery的新手,并试图找出以下两种语法之间的区别。

1. $( "#target" ).keyup(**function( event )** {
     alert("Event argument");
   }

2. $( "#target" ).keyup(**function(  )** {
     alert(" No Event argument");
   }

Html:

input id="target" type="text"

在.keyup()定义中添加“event”参数是否有任何区别?

2 个答案:

答案 0 :(得分:1)

除非你需要事件,否则它没有任何区别。对于keyup事件,event对象将包含非常有用的keyCode

试试这个:

$("#target").keyup(function(event) { 
  alert(event.keyCode); 
}

使用console.log而不是alert更容易。您可能希望更改为,以便您不必一直处理弹出窗口。在开发工具中查看日志(可能是f12键)。

这可能有助于您更好地了解正在发生的事情:

function foo(yourFunction) {
  var eventObject = {keyCode: 10};
  yourFunction(eventObject);
}

foo(function(event) {
  console.log(event);
});

在此示例中,调用函数foo并将函数传递给它。 foo然后调用传入的函数并将值传递给该函数。为了使该函数使用它,函数必须给它一个名字。看看这个:

foo(function() { //now the function doesn't accept any arguments/parameters
  console.log(event); // what is "event" ???
});

可以使用变量arguments访问传递给函数的参数。与我之前的例子保持一致:

function foo() { //argument name removed
  var eventObject = {keyCode: 10};
  yourFunction(eventObject); //this is now undefined

  console.log(arguments); 
  //this will be an array
  //the first value of the array will be the function that was passed in
}

foo(function() { //argument named remove
  console.log(event); //this is also undefined
  console.log(arguments);
  //the first value of "arguments" will be the eventObject that was passed in
});

无论你是否编写接受参数的函数,参数仍然可以传递给它并且可以与arguments变量一起使用,但是如果你需要它们,你应该给它们一个局部变量名。

最后一件事。你为什么命名论证并不重要。你只是给它你想要的任何本地名称。

$("#target").keyup(function(e) {
  alert(e);
}
$("#target").keyup(function(evt) {
  alert(evt);
}
$("#target").keyup(function(event) {
  alert(event);
}
$("#target").keyup(function(cookieMonster) {
  alert(cookieMonster);
}

所有这些都完全相同。变量引用相同的事件对象,因为它是传入的内容。

答案 1 :(得分:1)

无论如何都将参数传递给函数。通过将它们放在函数签名中,您实际上是为每个参数创建局部变量。例如,这些基本上是相同的。

$("#target").keyup(function() { 
  var event = arguments[0];
}

$("#target").keyup(function(event) {
}

如果您不打算使用event变量,则不声明它不会造成伤害。