js问题,小白问题关于点击事件函数

<!DOCTYPE html>
<html lang="en">

<head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <script>
            function show() {

                 
                  console.log(arguments.length);
                  
                  alert(arguments[0])
                  
            }
            
           
            window.onload = function () {
                  var Btn = document.getElementById("btn");
               

                  Btn.onclick = show;
            }

            
      </script>
</head>

<body>
      <button id="btn">按钮</button>

</body>

</html>

问题一:事件绑定不是应该是:元素节点.on + 事件类型 = 匿名函数;

那么Btn.onclick = show;show就不是匿名函数为什么可以这么写?

问题二:Btn.onclick = show();当我给show加()的时候为什么刷新页面就变成undefined了?

问题三:Btn.onclick = show;这段代码的意思是不是把点击事件作为形参传入function show()函数内,但是show()是没有形参的,为什么可以传入形参?

第一个问题:添加点击事件,添加的方式有很多,和匿名函数没有关系,show首先不可能是一个匿名函数,如果是匿名函数没有函数名怎么添加事件?而且要是用匿名函数的话需要这样Btn.onclick = () => {alert(1)};

第二个问题:Btn.onclick = show(),show()变成了一个函数调用,也就是说,我在添加事件时先执行了一遍show()函数,然后将show()函数的返回值赋值给了Btn.onclick,但是你的show()函数并没有return返回值,那么show()在执行完后会返回undefined,并且这样是没有办法添加点击事件,而且在页面加载时点击事件就会触发。

第三个问题:并不是把点击事件作为形参传入,有等号,那这就是一个赋值语句,意思就是,我要给Btn.onclick事件赋值一个函数,让我的Btn.onclick事件等于这个函数,这样触发点击事件时,也就等于触发了这个函数。

1、谁说的必须是匿名函数,是一个函数就行了

2、加上括号,代表函数调用,然后你在把调用结果赋值给Btn.onclick,这个结果是undefined,不是函数,不能运行

3、Btn.onclick = show的意思是吧函数show作为值赋值给Btn.onclick,Btn.onclick是Btn的点击事件的回调函数,即show本身就是点击事件的回调了

1.事件绑定有好几种方式 on+事件类型(jq里的)、addListenert、直接在标签里onclick=事件

2.元素节点.on + 事件类型 = 匿名函数 不一定必须是匿名函数,具名函数比如 btn.on('clicl',show())也行,Btn.onclick = show,show是具名函数

3.给show加括号就变成自己执行函数了不用点击,不用点击当然就没有参数了(参数是dom对象,也就是点击的对象,这个应该是js内部默认的参数)