在js中绑定onclick事件为什么不加括号,在html代码中必须要加?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <button id="btn">按钮</button>
</div>
<script>
    var btn = document.getElementById("btn");
    btn.onclick = demo();
    //btn.onclick = demo;

    /*加上括号是执行的意思,添加事件的回调函数应该就是给相应的事件属性赋值,
    而很明显需要把一个函数赋值给这个事件属性,而不是函数的调用结果。
    所以在js中的绑定是直接赋值。而在标签内的事件属性的值是由引号包裹的,
    代表的是当点击该元素时,执行引号内的代码,直接把引号内的代码拿出来跑,
    如果你不加括号,那就不会调用那个函数。*/

    /*简单来说就是带括号的是执行一次函数,不带括号的函数就是一个函数对象*/
    /*那下面这种意思就明显了,下面的这一句语句是将一个函数对象赋值给了btn.onclick
   */

    // btn.onclick = function(){alert("DOM0级事件处理111");}

    function demo(){
        alert("111");
    }

</script>
</body>
</html>

转载:https://www.cnblogs.com/foreverlin/p/10077651.html

原文地址:https://www.cnblogs.com/qq254980080/p/10479295.html