这个为啥是77啊

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

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

1回答
imooc_慕慕 2022-08-25 10:18:12

同学你好,解答如下:

首先我们需要先知道call()与apply()都能指定函数的上下文。

两者的区别:

https://img1.sycdn.imooc.com//climg/6306d81609ddb60007350368.jpg

因为arguments打印的结果为数组的形式,因此这个位置只可以使用apply()

apply方法的作用是调用函数,并改变函数中this的指向。

当调用fun1函数的时候,传入两个值33,44,此时arguments的结果为[33,44],

然后执行内部的fun2函数,它有两个参数,第一个参数是将this指向改成谁,第二个参数为数组,

由于fun2中,并没有使用this,此时apply的第一个参数没有实际意义,此处相当于 

https://img1.sycdn.imooc.com//climg/6306e986091b3ec903060086.jpg

即使没有意义,也要输入一个内容占位。

该数组是传给函数fun2的实参,因此fun2的形参a、b的具体值,是对应arguments中的内容:

https://img1.sycdn.imooc.com//climg/6306dba9096b370e04940305.jpg

即a是33,b是44,因此最后打印的结果是77。

祝学习愉快~

  • 由于fun2中,并没有使用this,此时apply的第一个参数没有实际意义

    这句话啥意思,那这里的this到底指向谁呢

    2022-09-12 14:23:47
  • 同学你好,解析如下:

    此时的this指向window。apply方法的作用是调用函数,并改变函数中this的指向。

    https://img1.sycdn.imooc.com//climg/631fdc340998ba8d05000218.jpg

    使用apply调用函数时,参数必须写两个(参数个数、含义是固定的)。由于fun2中并没有使用this,此时apply的第一个参数没什么实际意义。针对于此题我们可以有两种写法,效果是一样的。

    https://img1.sycdn.imooc.com//climg/631fded0096283e003880129.jpg

    如果fun2中使用了this,最终效果如下:

    https://img1.sycdn.imooc.com//climg/631fdef009a8289407080634.jpg

    https://img1.sycdn.imooc.com//climg/631fdf0b09635daa02280104.jpg

    同学可以自己测试一下看看。

    祝学习愉快~

    2022-09-13 09:38:50
  • 谢谢老师,懂了,还有个问题,就是如果使用apply的话,是不是可以给没有定义形参的函数传递参数了

    var color = "red";
    var obj = {
       color: "blue"
    };
    
    function fun1() {
       console.log(this.color);
       console.log(arguments);
    }
    
    function fun2() {
       fun1.apply(obj, ["a"]);
    }
    
    fun2(1, 2);


    2022-09-13 21:29:00
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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