这里有两个地方想不明白是怎么回事?

这里有两个地方想不明白是怎么回事?

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

第一个是return,如果不返回呢?为什么一定要返回,这里是什么原理,

第二个是fn.apply(this,..),这里是this又是谁?直接用fn()还能理解,但这样改一下就不知道原理了,请老师详细的指教,特别是关于函数返回,我总感觉不好理解,之前讲到的第一种闭包是把函数return出来,外面另起一个变量接受,然后再打()调用,那样也能理解,包括把函数作为参数形式的闭包都能理解,但这里我想不清楚!谢谢老师先!

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

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

2回答
好帮手慕夭夭 2021-01-23 10:16:43

同学你好,要仔细看一下第二个参数是加括号调用了,如下:

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

老师给你举一个小例子,帮助你去理解,如下:

1、如果按照同学所说的,第二个参数本身是一个函数,那除非它不调用。如下:


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

这样第二个参数才是deb函数,当事件触发的时候,才会执行它。如下:

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

2、而当函数加括号调用之后,页面打开的时候就会自动执行了。函数执行完毕,会默认返回undefined,所以第二个参数相当于undefined。

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

如下页面打开的时候,deb就自动执行了。当点击元素的时候,因为第二个参数绑定的是undefined,所以什么都没有触发。

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

3、根据第二条,当调用函数之后,需要自己设置一个函数作为返回值,这样第二个参数才是函数哦。


这里建议同学不要光看视频,一定要把例子多练习几遍,多思考,多测试,这样才能帮助你更好的理解与学习。

祝学习愉快~


好帮手慕夭夭 2021-01-22 18:45:10

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

1、如果不返回函数,那么函数默认返回的是undefined。即如下绑定事件时,addEventListener的第二个参数是undefined,所以不对。

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

一定要返回一个函数就是因为addEventListener去绑定事件的时候,第二个参数需要是一个事件处理函数。而代码中直接调用了debounce,所以页面打开的时候会自动执行,然后返回结果。即返回一个函数,就是addEventListener的第二个参数。

2、可以记住一句话,this指向函数的调用者。所以顺着这个思路,去找一下this在哪个函数里面,而这个函数又是谁调用的。老师给你讲解一下,以后可以按照这个思路自己去思考哦。如下:

这个this本来是在箭头函数中,但是箭头函数和普通的function函数不一样,不是在调用时绑定的this,而是在创建时绑定的。

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

箭头函数是在返回的匿名函数中创建的,所以箭头函数中这个this,绑定的就是匿名函数中的this,即我们看匿名函数是谁调用的即可。

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

而第一条的时候老师说了,addEventListener的第二个参数就是这个匿名函数,它作为事件的事件函数。而事件是input1绑定的,所以input1触发了事件函数,最终这个this指向的就是input1。

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


​祝学习愉快~

  • 提问者 慕田峪6263377 #1

    老师说的还是似懂非懂,比如不返回就是undefind,那我要说,第二个参数本身不就是一个函数吗?这个函数执行打印出一个值,作为函数的两个参数都有了,所以还是不能说明返回函数这个问题吧?

    2021-01-22 21:31:13
  • 提问者 慕田峪6263377 #2

    谢谢啦!老师说的很对,但我用我的方式理解了,说到底函数封装无非是把公用的部分整理出来单独放在一个函数内,把独用的部分作为一个小函数放在大函数里做一个参数,然后把这个小函数放在另外的地方执行,我也表达不好,反正我懂了,以后看这类问题不怕了


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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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