27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
我们先来通过一个小案例了解一下函数内部的arguments对象的作用
//定义函数
function f(m,n){ return m + n; } console.log( f(1,2) );
注意:函数的参数 实参和形参 个数可以不一致
问题:如果实参传过来的数量不确定怎么办?这时候要用到函数的arguments对象
//封装一个函数,计算所有实参的和
function fn(){ //arguments对象(类数组的对象): 用来获取所有的实参 // console.log(arguments); // console.log(arguments[0]); // console.log(arguments[1]); // console.log(arguments.length); var sum = 0; for(var i=0; i<arguments.length; i++){ //arguments[i] 是一个实参 sum += arguments[i]; } return sum; } console.log( fn(1) ); console.log( fn(1,2) ); console.log( fn(3, 4, 5) );
arguments案例:
function arg(){ console.log(arguments); }; arg("tom",[1,2,3],{age:18})
可以看到下面打印出来的结果,arguments是有值的,它的值就是我们传递进去的参数,虽然我们没有给fun函数定义形参,但是我们还是可以通过arguments来调用传递给函数fun的实参。
此外,我们可以看到arguments还有属性callee,length和迭代器Symbol。
1.我们发现callee的值是函数arg,是不是说callee指向函数arg,我们来测试一下
function arg(){ console.log("arguments.callee === arg()的值",arguments.callee === arg) }; arg("tom",[1,2,3],{age:18})
结果如我们想的一样,callee就是指向函数fun。
2.第二个属性length,我们经常在数组或者类数组中看到,可以看到arguments的原型索引__proto__的值为Object,故此我们推测arguments不是数组,而是一个类数组对象。
function arg(){ console.log(arguments instanceof Array); console.log(Array.isArray(arguments)) }; arg("tom",[1,2,3],{age:18})
结果打印出来的值都是false,说明arguments不是数组,而是一个类数组对象。
3.第三个属性是个Symbol类型的键,该类型的值都是独一无二的,该键指向的值是一个values函数,
该值是一个生成迭代器的函数
在arguments中有同样的效用。
function arg(){ console.log( arguments[Symbol.iterator]);let iterator = arguments[Symbol.iterator]();console.log( "iterator: ",iterator); console.log(iterator.next()); console.log(iterator.next()); console.log(iterator.next()); console.log( iterator.next()); } arg("tom",[1,2,3],{age:18})
本站内容均为小米原创,转载请注明出处:小米技术社区>> 函数内部的arguments对象(类数组的对象)