老师关于$.fn.extend有个问题

老师关于$.fn.extend有个问题

$.fn.extend里面的mode不是一个局部变量吗,为啥后面的hide和show两次执行还会生效。


正在回答

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

3回答

同学你好,没错,理解的对哦。祝学习愉快 ~

  • 幻城163630 提问者 #1
    好的,麻烦老师了
    2020-05-07 12:08:05
好帮手慕夭夭 2020-05-06 18:54:32

同学你好,mode的值与showHide传入的参数没有关系,它并不为空。每次调用时,showHide里面的代码都会执行一次,如下:

mode默认情况下为undefined,因为默认情况下,元素还没有设置data,获取没有定义的属性就是undefined。undefined转换为布尔类型为false,取反为true。执行if判断为mode赋值。

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

函数showHide返回的是一个对象,所以mode赋值的就是一个对象:

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

可以输出一下mode:

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

那么不管调用多少次showHide,里面的代码都会执行一次,mode都会重新被定义并赋值为undefined,然后执行if判断为它赋值。

祝学习愉快 ~

  • 提问者 幻城163630 #1
    老师我知道mode是个对象,我是想说第一次传入参数的时候可以知道它是执行的什么动画,但是第二次传递参数的时候我们只传递了一个字符串(show)并不知道它是什么动画,为啥就执行第一个动画的显示和隐藏呢?第一个与第二三个参数的关系点在哪儿,我有点茫,是上面那个函数showHide保存起的吗?,但在下面的这个这个showHide里面mode是个局部变量,每次执行完了都会自动注释掉,那我们在用show传递进来不是mode这个对象里面就应该是默认的动画淡入淡出动画了吗? 嗯,我主要问题就是第一个传递的参数,第二三个进来之后show、hide是如何知道执行第一个参数动画中的显示和隐藏的?关系点在哪儿麻烦老师解答一下,谢谢。
    2020-05-06 20:03:29
  • 提问者 幻城163630 #2
    老师我好像突然知道了,你看下对不对,就是我们是把mode对象保存通过data在dom元素中的,因此通过第一次传参数知道要执行什么动画之后,mode对象就开始保存在dom元素中了,然后后面两次执行的字符串就直接拿dom元素中的mode就可以知道是执行什么动画了。对不?
    2020-05-06 21:26:17
好帮手慕夭夭 2020-05-06 16:31:39

同学你好,是说的如下hide和show两次执行吗?

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

这是因为每次调用都要执行一次下面的showHide,那么它里面的变量mode就会重新定义被赋值。重新理解一下哦。

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

如果说的不是这个,请详细描述一下,以便老师准确的为你解答。祝学习愉快 ~

  • 提问者 幻城163630 #1
    老师第一次调用showHide是传入参数就是那个对象嘛,第二次第三次传入的不是字符串(show/hide),我的理解就是mode不是局部变量吗?,当第二次或者第三次传入的时候mode不应该又为空了吗?
    2020-05-06 16:55:31
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

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

在线咨询

领取优惠

免费试听

领取大纲

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