关于函数调用的问题

来源:2-8 用js实现淡入淡出和卷下卷起效果

兰香川川

2020-01-15 11:24:23

// 提取show公共部分

 function show($elem, callback) {
     if ($elem.data('status') === 'show') return;
     if ($elem.data('status') === 'shown') return;
     $elem.data('status', 'show').trigger('show');
     callback();


 }

var silent = { 
     show: function($elem) {
         show($elem, function() {
             $elem.show();
             $elem.data('status', 'shown').trigger('shown');
         });
     },
}

想问下按以下方式调用

var $box = $('#box');
silent.show($box);

在silent内部的show方法继续调用$elem.show(),那么为什么会选择到外部的自定义函数show去?还有jQuery不是自己封装了show()函数的吗,为什么没有调用到?

写回答

2回答

好帮手慕慕子

2020-01-16

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

  1. slient.show($box)表示调用slient对象下的show方法,slient内部show方法内部是直接调用提前定义好的公共方法show。 具体可以参考下图:

    http://img.mukewang.com/climg/5e1fc02009beed2f07180467.jpg

  2. jQuery自己封装的方法是直接使用$elem.show()这种写法调用。而老师的写法是slient.show($box),调用的是自定义的方法。

  3. 这里不是递归,同学结合上图,将两个show方法区分开就好理解了。

如果我的回答帮助到了你,欢迎采纳,祝学习愉快~

0

兰香川川

提问者

2020-01-15

我觉得这个看上去就像递归函数一样,该怎么理解呢

0

0 学习 · 14456 问题

查看课程