我刚刚发现,.on('click')
和.click()
要求在没有括号的情况下编写命名函数。
喜欢这样
$('.close').click(close);
为什么会这样?我想我希望函数在点击时立即发生,这就是你在为变量赋值时省略括号的地方!?
当你使用匿名函数时,括号必须在那里!!
答案 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(单击元素时)。