现在,我通常用 ()
调用一个函数(不需要参数)。像这样:
myFunction(); //there's empty parens
除了在我可以逃脱的 jQuery 调用中:
$('#foo').bind('click', myFunction); //no parens
美好的。但是最近看到这条评论here关于 SO:
“考虑使用
setTimeout(monitor, 100);
而不是 setTimeout('monitor()', 100);
。Eval 是邪恶的 :)”哎呀!我们真的是
eval()
- 在这里输入一个字符串?我想我并不真正理解“调用”函数的意义和含义。调用和引用函数的真正规则是什么?
最佳答案
在 JavaScript 中,函数是一流的对象。这意味着您可以将函数作为参数传递给函数,或者通常将它们视为变量。
假设我们正在讨论一个函数 hello
,
function hello() {
alert('yo');
}
当我们简单地写
hello
我们指的是不执行其内容的函数。但是当我们添加括号
()
在函数名之后,hello()
然后我们实际上调用了会在屏幕上提示“yo”的函数。
bind
jQuery 中的方法接受事件类型(字符串)和函数作为其参数。在您的示例中,您将类型 - “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()());
关于javascript - 函数调用中的 "()"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3641330/