2017-05-04 104 views
-1

如果我有一个功能,如:JS的onclick功能

function init() { 
    var btn = document.getElementById('sort-btn'); 
    btn.onclick = btnHandle(); 
} 

btnHandle()地没有点击该按钮执行。 只要页面加载,它就会执行。

但如果代码是:

function init() { 
    var btn = document.getElementById('sort-btn'); 
    btn.onclick = btnHandle; 
} 

其正常执行。

两者有什么区别?

+0

btnHandle将是一个函数。所以要调用一个函数,你应该添加btnHandle(); –

+0

那么区别很简单,如果你添加'()',强制它运行。在选项二中,你没有。 – Dellirium

+3

一个是函数调用,另一个是对象分配 –

回答

1

当您使用btnHandle()时,立即调用函数,但使用btnHandle时,您传递此函数的引用,该函数在单击按钮时执行。

1

btnHandle将评估为变量的值。

btnHandle()获取变量的值,将其作为函数调用,并评估函数返回的值。


btn.onclick = btnHandle;分配功能onclick

btn.onclick = btnHandle();指定将函数调用到onclick时得到的返回值。

1

您应该为onClick指定一个函数,而不是一个值。

在您的代码:

btn.onclick = btnHandle(); btnHandle()将在页面运行时执行,结果将被分配给onClick。

btn.onclick = btnHandle; btnHanle是一个函数,它会在点击按钮时被调用。