老师请问这里第三个参数为什么不能直接传end啊

老师请问这里第三个参数为什么不能直接传end啊

const move = (el, { x = 0, y = 0 } = {}, end) => {

      el.style.transform = `translate3d(${x}px, ${y}px, 0)`;


      el.addEventListener(

        'transitionend',

        end();

        },

        false

      );

    };


正在回答

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

2回答

同学你好,解答如下:

move方法的第三个参数要求是函数,所以我们要传入一个函数,因此写了一个箭头函数(参数要求):

http://img1.sycdn.imooc.com//climg/605ff1e40953c7aa08230295.jpg

将resolve方法写在箭头函数中,目的是执行箭头函数后,再调用resolve方法:

http://img1.sycdn.imooc.com//climg/605ff62c09266bea08650416.jpg

如果直接写resolve(),会立即调用resolve方法,并把resolve方法的返回值,作为move的第三个参数,二者含义不同、执行的时机也不同:

http://img1.sycdn.imooc.com//climg/605ff5f4096d8b1f09430375.jpg

祝学习愉快!





好帮手慕言 2021-03-27 10:10:34

同学你好,如果直接传end,不设置默认值,那么最里层的move函数没有传递第三个参数,执行end会报错的。

http://img1.sycdn.imooc.com//climg/605e93ab09e0b5c805090110.jpg

​祝学习愉快~

  • 提问者 kasugan #1

    嗯嗯谢谢老师这个我明白了,还有一个疑问,下面的代码的resolve()请问为什么要包含在箭头函数中呢,不能直接传resolve()吗?

    const movePromise = (el, point) => {

          return new Promise(resolve => {

            move(el, point, () => {

              resolve();

            });

          });

        };


    2021-03-27 20:02:32
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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