<!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内部默认的参数)