请问老师我理解这整段代码的运行逻辑对吗?

请问老师我理解这整段代码的运行逻辑对吗?

问题描述:

理解:debounce设置形参function debounce(fn, milliseconds = 250, context)
1,debounce传入实参debounce(scrollHandler, 250, $backtop).bind(null, winHeight)
第一个实参传输给了fn,第二个实参传输给了,milliseconds ,第三个就是dom元素$backtop
2,这个时间调用了debounce函数,函数的执行,let timer = null;  然后执行到了return返回了一个函数,
return函数执行, const self = context || this,可以理解contextthis指向了dom元素$backtop.
然后进入判断,在执行就到了,timer定时器,定时器时间是milliseconds ,
3,里边的语句执行 fn.apply(),fn就是scrollHandler,apply参数第一个self指定了this指向$backtop,第二个参数只传入args,其实就是scrollHandler接收了参数,然后回过头看scrollHandler函数形参为(threshold)
4,现在就剩下一个疑问了,就是args形参从哪里来,我看了一下老师的解答
bind可以改变函数的this指向,并返回一个新的函数:bing有2个参数,它还可以传入其他参数,其他参数是新函数的参数:那么谁调用的bind函数debounce(scrollHandler, 250, $backtop).bind(null, winHeight),
可以看到是debounce,调用bind函数第一个传输的值是this就是null,第二个就是传值,debounce执行内部返回一个函数,就由args接收到了,然后又被fn.apply(self, args);传输给了scrollHandler由threshold接受,就成了临界值,


正在回答

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

1回答

同学你好,同学理解的是对的,关于第四点同学可以直接将bind中追加传递参数如下:

https://img1.sycdn.imooc.com//climg/62f712ca0938a9c811060227.jpg

然后将args打印一下看看是否与同学理解的一致,如下:

https://img1.sycdn.imooc.com//climg/62f71304093d2a8909580512.jpg

最终结果如下:

https://img1.sycdn.imooc.com//climg/62f7131f090c0f0506550066.jpg

然后我们在回过头来看看scrollHandler中的参数与剩余参数都是什么如下:

https://img1.sycdn.imooc.com//climg/62f7143109f1580d11150477.jpg

https://img1.sycdn.imooc.com//climg/62f71454098c73a006100093.jpg

祝学习愉快!

  • 慕田峪1427181 提问者 #1

    https://img1.sycdn.imooc.com//climg/62f7222c09c3459d10780924.jpg

    我测试了一下,

    debounce(scrollHandler, 250, $backtop).bind(null, winHeight,100,1000),

    确实是debounce里边的args参数接收到了bind里边的值, 然后由

     fn.apply(self, args);传输过去,

    分别在debounce里边打印了一下args和在scrollHandler打印了一下

    是一样的,

    我还以为,我这条理解错了呢



    2022-08-13 12:04:59
  • 好帮手慕小李 回复 提问者 慕田峪1427181 #2

    同学你好,同学理解的没有错。祝学习愉快!

    2022-08-13 13:04:18
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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