关于arguments的问题?

关于arguments的问题?

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


问题在图片上标注了,这里有些疑惑,麻烦老师了!​

正在回答

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

2回答

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

1、arguments是debounce函数的参数fn的实参,在下面调用时传入的a,b为形参,与arguments对应。arguments是一个参数列表,假设arguments参数列表保存两个参数1和2 那么fn通过apply方法,直接把arguments作为实参传入。就相当于fn(1,2) ,a和b对应的也就是1和2。

2、debounce返回的匿名函数是addEventListener的第二个参数,所以它表示的是一个事件函数。在事件函数中,只有一个参数,这个参数就是事件对象。如果我们自己定义参数去传递是没有任何意义的。可以参考如下理解:

(1)事件函数只有一个参数,即事件对象event

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

(2)如果传入两个参数a和b,那么第一个参数a就为事件对象,而事件对象不会再有其他参数了,所以b为undefined,就没有意义。

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

​祝学习愉快!

好帮手慕张 2021-01-23 11:29:15

同学你好,同学只截图了部分代码,老师无法准确定位问题并解答,建议同学粘贴完整的代码上来,方便帮助同学快速准确的解答问题。

祝学习愉快!

  • 提问者 慕田峪6263377 #1

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

    // let timer=null;

    // input1.addEventListener('keyup',function(){

    //     if(timer){

    //         clearTimeout(timer)

    //     }

    //     timer = setTimeout(()=>{

    //         //模拟触发

    //     console.log(input1.value);

    //     //清空定时器

    //     timer=null;

    //     },500)

        



    // })

    //防抖

    function debounce(fn,delay=500){

        // timer 是闭包的

         let timer = null;

        return function(){

            if(timer){

                clearTimeout(timer)

            }

            timer = setTimeout(()=>{

                fn.apply(this,arguments);

               

                timer = null;

            },delay)

        }

    }

    input1.addEventListener('keyup',debounce(function (){

        console.log(input1.value);

    }))



      function (){}

      function nnt(){}

      var nnm=function(){}

    2021-01-23 11:37:54
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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