何时在JavaScript函数中使用括号

6

我有一个名为showText()的函数,它将表单文本框中的一些文字复制到其他地方的段落中。它是用以下方式调用的:

document.getElementById("mybutton").onclick = showText; 

如果我在 showText 后面加上 (),它将不起作用。我从阅读类似于这里的答案中了解到这是调用函数的唯一方法。

稍后在脚本中,需要使用 () 才能正常工作:

window.addEventListener("keypress", function(e) {
    var keycode = e.keyCode;
    if (keycode == 13) {
        showText();
    }
}, false);

我不确定这里发生了什么。


函数是对象。你的两个例子说明了将函数赋值与调用函数之间的区别。 - user1106925
3个回答

16

showText 返回函数 showText

showText() 运行函数 showText 并返回结果

当你将一个函数附加到事件处理程序(如 .onclick)时,它期望是一个 function

你可以调用一个函数并将结果返回给事件,像这样:document.getElementById("mybutton").onclick = showText();,只要该函数本身返回一个函数:

function showText() {
    return function () { 
        alert('hello world'); 
    }
}

0
在Javascript中,函数是一等公民,这意味着它们可以分配给一个变量......这就是你在第一个函数中所做的...基本上你正在将onclick设置为你选择的函数(告诉浏览器,当它被点击时...调用这个函数)

通过使用(),您正在调用该函数...

我也可以像这样做

function test() {
  alert('Alert something');
}

var a = test;
a();

0

当你有这样的语句:

onclick = showText;

右侧表达式被计算并将结果分配给左侧。如果标识符showText解析为函数对象,则分配对该对象的引用。

如果showText后跟在括号中封闭的形式参数列表,即showText(),则使用提供的参数调用函数并分配结果。形式参数列表可以为空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接