当你使用.on('click')或.click()时,为什么命名函数后没有括号?

时间:2013-12-04 12:35:45

标签: javascript jquery

我刚刚发现,.on('click').click()要求在没有括号的情况下编写命名函数。

喜欢这样

$('.close').click(close);

为什么会这样?我想我希望函数在点击时立即发生,这就是你在为变量赋值时省略括号的地方!?

当你使用匿名函数时,括号必须在那里!!

2 个答案:

答案 0 :(得分:2)

因为函数是作为参数传递的。

如果后面有括号,则称为,返回值将作为参数传递。

  

我希望功能立即发生,点击

“马上”和“点击”是两个非常不同的时期。

  

使用匿名函数时,括号必须在那里

构成函数表达式语法一部分的括号是。

.click(function () { ... });

调用该函数的人不得。

.click(function () { ... }());

答案 1 :(得分:1)

因为您希望将实际函数作为参数传递(因此jQuery可以在以后单击该元素时调用它),而不是调用函数并传递它的返回值< / em>到.click()(这不是你想要的,但如果你把()放在函数名之后会发生什么。)

当您点击元素时,将调用您传递给.click()的第一个参数的任何函数。它将始终使用一个参数(Event对象调用,根据单击时需要执行的操作,您可能会或可能不会忽略该对象)。

所以你可以这样做:

var close = function(evt) {
    // do stuff
};
$('.close').click(close);

或者

$('.close').click(function(evt) {
    // do stuff, anonymous function
});

无论哪种方式,你都不要把()放在它后面,因为当你第一次将它作为元素的点击应用时,想要调用该函数处理程序。当发生点击时,您希望让jQuery稍后在上将其称为。 jQuery将通过传递它想要的任何参数(我们知道它将是1个Event对象)来完成此任务。


换句话说:紧跟在function之后的括号:

function(arg1, arg2)

总是说出你希望收到的论据。

函数名称后面的括号:

close(arg1, arg2)

意味着您要调用该函数,传入这些参数。第二个应该永远不会出现在这个特定的代码中,因为你永远不会调用close 。 jQuery(单击元素时)。