在JavaScript中,函数是一等公民的对象。这意味着您可以将函数作为参数传递给函数,或将其作为变量处理。
假设我们正在谈论一个名为hello
的函数,
function hello() {
alert('yo');
}
当我们简单地编写代码时
hello
我们指的是不执行其内容的函数。但是当我们在函数名称后面添加括号()
时,
hello()
那么我们实际上是在调用函数,该函数将在屏幕上弹出“yo”的警报。
jQuery中的bind
方法接受事件类型(字符串)和一个函数作为参数。在您的示例中,您正在传递类型 - “click”和实际函数作为参数。
你看过电影《盗梦空间》吗?考虑这个牵强的例子,它可能会让事情变得更清晰。由于JavaScript中的函数是一等公民对象,因此我们可以从函数内部传递和返回函数。因此,让我们创建一个在调用时返回函数的函数,并且返回的函数在调用时也返回另一个函数。
function reality() {
return function() {
return function() {
alert('in a Limbo');
}
};
}
这里,
reality
是一个函数,
reality()
也是一个函数,
reality()()
同样也是一个函数。但是
reality()()()
不是一个函数,只是
undefined
,因为我们没有从最内层的函数返回一个函数(我们什么也没有返回)。
因此,对于
reality
函数示例,您可以将以下任何一个传递给jQuery的bind。
$('#foo').bind('click', reality);
$('#foo').bind('click', reality());
$('#foo').bind('click', reality()());
var f = function(){ return f; }
这个例子怎么样?它允许你无限次地输入f()()()()()()()()()()()()()()()
,非常酷。 - Callum Rogers