在javascript中,当执行getElementById()。onclick = function时,为什么函数()不是必需的?

时间:2017-08-29 11:56:21

标签: javascript

很抱歉,很难想出一个标题。我还是javascript的新手,有些让我困惑的事情。

这是我的代码

function getRandom() {
  document.getElementById('divtest').innerHTML = (Math.floor(Math.random()* 20))
}

document.getElementById('buttontest').onclick = getRandom

因此,通常情况下,在文档中的某个地方调用函数时,或者甚至在添加onclick =' myFunction()'在html中,我需要用paranthese编写myFunction()。

但是在这里,当我在getElementById上执行.onclick时,如果我写= getRandom(),我的代码不起作用,它需要是= getRandom,如我的代码片段所示。

为什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

在Javascript中,您传递对函数的引用,而不是调用它(这会将函数的返回值添加为回调)。

在HTML中定义回调函数时,您正在将完整的调用写入HTML元素属性。

答案 1 :(得分:2)

通过执行(),您可以调用函数。在您的情况下,如果添加getRandom,则调用undefined,结果onclick将分配给var func = function () { return 2 } console.log(func) //=> ƒ () { return 2 } console.log(func()) //=> 2 事件处理程序。所以你想要分配函数本身。考虑一下例子:

ngOnInit(): void {
    ...
    this.electionStateSubscription = this.electionState.getState()
            .subscribe((state: ElectionState) => this.state = state);
}

ngOnDestroy(): void {
    ...
    this.electionStateSubscription.unsubscribe();
}

答案 2 :(得分:0)

你的onClick有点"指向"到包含在该元素上遇到click事件时要运行的代码的函数。这不是一个正常的呼叫"到函数,你将得到一些值作为返回。在那里你会使用括号。但是,您在此处将该函数设置为click事件的处理程序。