首页 新闻 赞助 找找看

js 或jquery定义方法时,参数不固定是怎么实现的??

0
悬赏园豆:10 [待解决问题]

js 或jquery定义方法时,参数不固定是怎么实现的??

别告诉我是多态啊

就像$.post(url,[data],[callback],[type])一样

网络终结者的主页 网络终结者 | 初学一级 | 园豆:29
提问于:2014-12-04 23:00
< >
分享
所有回答(3)
1

它是有一个默认参数的,一般都是如下形式

$.fn.functionName= function(opts) {
 var defaults = {
 XXX: XXX,
 XX: XX
 };
 var options = $.extend(defaults, opts);
//todo:....

本质还是可选参数,也是给了一些默认值,你进源码看看就知道了
Halower | 园豆:1723 (小虾三级) | 2014-12-05 00:49
0

JS的函数中,可以用arguments接收所有的方法参数,只要你传了。

幻天芒 | 园豆:37175 (高人七级) | 2014-12-05 08:52

$.post(url,aa)

我怎么区分这个aa是data,还是callback,还是type

支持(0) 反对(0) 网络终结者 | 园豆:29 (初学一级) | 2014-12-05 09:06

@网络终结者: 参数顺序啊~如果你想乱序的话,就必须用{url:'', data:''}这种参数写法。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2014-12-05 09:33
1

定义函数的时候参数叫做形参,调用函数的时候,参数叫做实参。

在执行函数之前,有一个初始化的准备工作:

其中一个步骤是给形参赋值:实参从左到右依次赋值给形参。实参个数多的话肯定没问题,每一个形参都得到值了,要是实参的个数少,那么剩下的形参值就是undefined

还有一个步骤是准备Arguments Object,也就是楼上说的arguments对象,它有三个属性:

1. callee --- 当前函数的引用,可以用来实现递归调用

2. length --- 实参的个数,也是arguments数组的长度

3. arguments数组的值,也是所有实参依次组成的数组,下标从0开始

另外还有一个特性需要注意:arguments数组和形参是共享数据的,修改一处,另一处也会改变。共享也是有限制的,假如形参有x,y,z三个,但是实参只有两个5,7。这样的话arguments数组的长度只有2,所以只有x与arguments[0],z与arguments[1]共享,z不存在共享,应为没有arguments[2]

ThreeTree | 园豆:1490 (小虾三级) | 2014-12-05 09:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册