js事件不同写法的处理方式是什么?

作者站长头像
站长
· 阅读数 8

学习js事件时,有三种不同的写法,第一种

<button id="btn" onclick="aa(dianji(),1000)">点击</button>
<script>
 function dianji() {  
        console.log("点击")
    }
    // 防抖
    function aa(fn, delay) {
        let timer = null
        // console.log(timer)
        return function () {
            if (timer) {
                clearTimeout(timer)
            }
            timer = setTimeout(fn, delay)
        }
    }
</script>

第二种

<button id="btn" >点击</button>
<script>
    function dianji() {
        
        console.log("点击")
       
    }
    // 防抖
    function aa(fn, delay) {
        let timer = null
        // console.log(timer)
        return function () {
            if (timer) {
                clearTimeout(timer)
            }
            timer = setTimeout(fn, delay)
        }
    }
    let a = document.getElementById("btn")
    a.onclick = aa(dianji, 1000);
    
    // console.log(timer)
</script>

第三种

 <button id="btn" >点击</button>
<script>
    // 节流
    function aa1(fn,delay){
        let valid = true;
        return function(){
            if(!valid){
                return  false;
            }
            valid = false;
            setTimeout(function(){
                fn();
                valid = true;
            },delay)
        }
    }
    function dianji() {
        
        console.log("点击")
       
    }
    // 防抖
    function aa(fn, delay) {
        let timer = null
        // console.log(timer)
        return function () {
            if (timer) {
                clearTimeout(timer)
            }
            timer = setTimeout(fn, delay)
        }
    }
    let a = document.getElementById("btn")
    // a.onclick = aa(dianji, 1000);
    a.addEventListener("click",aa(dianji,1000))
    
    // console.log(timer)
</script>

我想实现一下点击事件的防抖效果,但是直接在button标签中加点击事件没有效果。第一个问题:第一种写法哪里有问题?应该怎么改正?第二个问题:这三种写法是不是在运行的时候有区别?区别是什么?希望有人解答一下

回复
1个回答
avatar
test
2024-06-26

onclick="aa(dianji(),1000)",你的aa函数第一个参数需要的是一个函数,而你的写法带()指运行dianji这个函数,把函数返回值传给aa,把dianji传给aa应该写成onclick="aa(dianji,1000)"

没啥区别,都是事件绑定,硬说区别,就是addEventListener较前两种可以绑定多次

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容