事件函数里面只能可以有一个事件参数,那么问题又来了,如何解释?

事件函数里面只能可以有一个事件参数,那么问题又来了,如何解释?

http://img1.sycdn.imooc.com//climg/600be1bc090445ac07610602.jpg

如果按老师说是事件函数应该是的bounce()啊,那么里面的参数应该是这个匿名函数咯?

现在的问题是事件函数里面的函数?那么这种情况的事件函数到底是哪个呢?这里的事件是‘keyup’​,而绑定的函数不就是的bounce()吗?

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,理解的有问题,解答如下:
1、debounce不是事件处理函数,在keyup事件中,debounce方法直接调用的,里面return返回的匿名函数是事件处理函数

http://img1.sycdn.imooc.com//climg/600bf7a2096b53e208060461.jpg

2、debounce调用时里面传入的函数为回调函数,也就是形参fn,fn是在事件处理函数中调用的

http://img1.sycdn.imooc.com//climg/600bf81709cfc95108230584.jpg

3、如果debounce函数没有调用,那么事件处理函数就是debounce 。

自己再理解下,祝学习愉快!

  • 慕田峪6263377 提问者 #1

    如果debbounce函数没有调用,那么事件处理函数就是它自己,针对这个问题,我的理解是这个函数直接在里面往下写是吧,就像前面没有封装的情景一样对吗?

    不过我又做了这样一个试验,结果是错误的,看下面代码

    const input1 = document.getElementById('input1');

    let timer = null;

    fun = function () {

        if (timer) {

            clearTimeout(timer)

        }

        timer = setTimeout(() => {

            console.log(input1.value);

            timer = null;

        }, 500)

    };

    input1.addEventListener('keyup', fun());

    把函数拿出来单独写好,再放在里面为什么就不行?按理应该是可以的吧,这样

    不是等于把函数代码放回去吗?只不过是拆分一下?麻烦老师再跟我说说,谢谢!


    2021-01-23 19:53:02
好帮手慕慕子 2021-01-24 11:15:38

同学你好, 因为fun()表示调用函数,也就说代码执行到input1.addEventListener('keyup', fun());,就会立即调用函数fun,而keyup事件是在键盘松开时才会触发,所以无法实现效果。

建议去掉括号,只传入函数名,在键盘松开时才调用fun函数。示例:

http://img1.sycdn.imooc.com//climg/600ce63109d50c8007490386.jpg

祝学习愉快~

  • 提问者 慕田峪6263377 #1

    const input1 = document.getElementById('input1');

    let timer = null;

    fun = function () {

        return function (){

            if (timer) {

                clearTimeout(timer)

            }

            timer = setTimeout(() => {

                console.log(input1.value);

                timer = null;

            }, 500)

        }

    };

    input1.addEventListener('keyup', fun());

    可是这样就可以,为什么?,不过我似乎已近明白了,因为fun执行后返回函数,要执行就要加括弧,所以fun()实际就等于一个还没执行的函数,然后通过事件触发执行,所以这种情况fun()虽然有括弧,实际等于一个没有括弧的函数,不知道我这样理解对不?

    没办法,我只有这样反复的去做试验去理解这里面的原理,一旦把疑惑破解了,那就打通了任督二脉,一通百通,万变不离其宗,希望老师多包涵我的一些幼稚的提问,不过有些确实好像是系统原因,把我搞的要死,我非常希望live server服务能解决,phpsdudye是可以了,但问题的原因还是希望解决

    2021-01-24 13:18:51
  • 好帮手慕慕子 回复 提问者 慕田峪6263377 #2

    同学你好,对于你的问题解答如下:

    1、理解是对的

    2、关于live server插件的问题,老师这边无法复现同学说的情况,所以也不清楚具体是什么原因造成的,同学可以尝试将vscode编辑器卸载后重新安装,然后再安装live server插件测试下,如果还是不可以的,就先使用phpStudy继续往后学习。

    祝学习愉快~

    2021-01-24 13:58:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师