javascript - 函数调用中的 "()"是什么意思?

标签 javascript

现在,我通常用 () 调用一个函数(不需要参数)。像这样:

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/

相关文章:

javascript - 使用 TAL :defined variable in javascript

javascript - Node.js 捕获闭包变量

javascript - 表单提交时未定义函数

javascript - Web 服务调用失败但不返回任何错误

javascript - JS :How to turn any value to be a hyperlink via HTML form

javascript - 如何让 for 循环创建一个由 9 个随机 1 位数字组成的字符串?

javascript - 当我使用 AngularJS 1.3.14 时不读取 JSON 文件但在 1.2.10 版本中工作正常

javascript - 根据特定条件查找数组中元素的最后一个索引

javascript - 在版本 4.4.6 中禁用 ckeditor 上下文菜单

javascript - 通过 PHP session 进行服务器身份验证