为什么警报在无法使用时只能运行一次?

时间:2019-05-05 00:01:35

标签: javascript function

document.querySelector('html').onclick = function() {
    alert('Hy');
}

每当我单击显示对话框的网页时,该工程就会运行。

但是如果我要删除函数声明并改为编写

document.querySelector('html').onclick = alert('Hey');

它只能运行一次。

我不明白这一点,因为每次我单击网页时,我都要求javascript通过Hey发出警报,但它只能这样做一次。 函数声明对这段代码有什么影响?

2 个答案:

答案 0 :(得分:0)

您需要区分函数和调用函数的结果。在第二种情况下,您要立即运行alert函数,然后将onclick设置为其结果(这不是一个函数,并且没有任何用处)。

答案 1 :(得分:0)

因为这样做是什么?

document.querySelector("html").onclick = alert("Hey");

它运行代码alert("Hey"),然后将元素的onclick设置为alert("hey")返回值。如果alert("Hey")返回一个函数,这只能作为适当的事件处理程序。它不是:

console.log(alert("Hey"));

因此您需要附加一个函数或函数引用,如下所示:

document.body.onclick = () => alert("Hey");
<p>Click Me</p>

以上方法有效,并且只是所需语法的一小部分-为此,我们使用了ES6箭头功能。