关于防抖函数的arguments问题

关于防抖函数的arguments问题

http://img1.sycdn.imooc.com//climg/5cdd082100015b6207590540.jpg

 老师一个问题,是写input输入框时函数节流的问题,在节流函数或者防抖函数中setTimeout中的arguments都要在外面先保存一下,我试了试好像的确是这样,为什么在setTimeout中的函数访问不到arguments值啊? 如图所示


正在回答 回答被采纳积分+1

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

3回答
一路电光带火花 2019-05-17 10:08:24

arguments是所在的函数传参的对象,但是你这个计时器中都没有传递参数,所以肯定不不行的呀。就跟我下面这种写法是的,返回的函数调用的时候,没有传参,所以长度就是0;

http://img1.sycdn.imooc.com//climg/5cde16e600019df805670250.jpg

_arg的话,是个变量,就好像,我可以访问所在的作用域的变量一样,所以是可以访问_arg的。

这个计时器跟_arg都是在返回的这个函数中(同一作用域),所以可以访问。


  • 提问者 qq_那些荒废流年 #1
    是这个原因呀。那要是不用es6的rest参数的话,就只能在外面先保存一次了吧?
    2019-05-17 11:31:58
  • 是的,在需要在外面保存一次,不过不知道你说的rest的写法是咋写的,你可以试试看行不行。
    2019-05-17 18:46:53
提问者 qq_那些荒废流年 2019-05-16 22:19:35

http://img1.sycdn.imooc.com//climg/5cdd70bc0001b24510300647.jpg

老师您好,之前的图没有截完整,这个整个代码。在这里监听keyup事件,并打印出输入框中的值,可以测试发现当输入值的时候_arg.length的长度是不断变化的,而arguments的长度一直为0。这就是我刚开始为什么提了一个为什么定时器内获取不到arguments长度的问题。因为这段代码我也是在网上看的别人的,有时候在研究的时候有些地方还是不清楚,麻烦老师解释一下。

好帮手慕夭夭 2019-05-16 19:17:32

你好同学,是这样的,如下红框中arguments也会是获取不到参数的,因为arguments是获取的本作用域函数中的参数,而代码中匿名函数并没有传递参数,此时arguments长度为0哦。

http://img1.sycdn.imooc.com//climg/5cdd45d000013d3a07680321.jpg

所以访问arguments的值与定时器无关,是因为arguments所在的函数本身就没有参数。当然了,想要保存arguments的值,也要放在匿名函数外边,这样让它能够获取到debounce传递的参数值哦:

http://img1.sycdn.imooc.com//climg/5cdd470e00014c9904160125.jpg

祝学习愉快 ,望采纳。

  • 提问者 qq_那些荒废流年 #1
    老师您好,麻烦您看下评论,我再放张图
    2019-05-16 22:16:16
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
热门框架Vue开发WebApp 18版
  • 参与学习           人
  • 提交作业       209    份
  • 解答问题       3299    个

本路径是通过ES6基础知识、运用Zepto、Swiper、fullPag等移动端常用工具包、以及当下流行框架Vue,结合多个实战案例,还原真实开发场景,最终实现手机端购物商城网页开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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