预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Javascript函数的学习 Javascript函数的学习每一个Javascript函数都能在自己作用域内访问一个特殊的变量-arguments。这个变量含有一个传递给函数的所有参数的列表。arguments对象不是一个数组。尽管在语法上它跟数组有相同的地方,例如它拥有length属性。但它并不是从Array.prototype继承而来,实际上,它就是一个对象。因此,我们不能直接对arguments使用一些数组的方法,例如push,pop或slice等。所以为了使用这些方法,我们就需要将其转换为一个真正的数组。转化为数组下面的代码将会返回一个包含arguments对象所有元素的数组。Array.prototype.slice.call(arguments);由于转化的速度很慢,所以在性能要求严格的程序中不建议这样做。传递参数下面是一种比较推荐的方法,将arguments对象从一个函数传递到另一个函数。复制代码代码如下:functionfoo(){bar.apply(null,arguments);}functionbar(a,b,c){//dostuffhere}另外还有一个比较巧妙的方法,就是同时使用call和apply快速创建一个解绑的外层方法。复制代码代码如下:functionFoo(){}Foo.prototype.method=function(a,b,c){console.log(this,a,b,c);};//Createanunboundversionof"method"//Ittakestheparameters:this,arg1,arg2...argNFoo.method=function(){//Result:Foo.prototype.method.call(this,arg1,arg2...argN)Function.call.apply(Foo.prototype.method,arguments);};函数形参和arguments属性的关系arguments对象为它自身属性和函数的形参都创建了getter和setter方法。因此,修改函数的形参会影响对应的arguments对象的属性值,反之亦然。复制代码代码如下:functionfoo(a,b,c){arguments[0]=2;a;//2b=4;arguments[1];//4vard=c;d=9;c;//3}foo(1,2,3);性能问题arguments只在两种情况下不会被创建,一是在函数内部被声明为局部变量,二是当做函数的形参。其他情况,arguments对象总是会被创建。由于getter和setter方法总是会随着arguments对象的创建而创建,因此使用arguments对性能本身几乎没有影响。然而,有一种情形会严重影响Javascript的性能,那就是使用arguments.callee。复制代码代码如下:functionfoo(){arguments.callee;//dosomethingwiththisfunctionobjectarguments.callee.caller;//andthecallingfunctionobject}functionbigLoop(){for(vari=0;i<100000;i++){foo();//Wouldnormallybeinlined...}}在上述代码中,foo函数不再是一个简单的内联扩展,因为它需要知道它自身以及它的调用者(caller)。这不仅抵消了内联扩展所带来的性能提升,同时也破坏了函数的.封装性,因为函数本身可能需要依赖于一个特定的调用背景。因此,建议大家尽量不要使用arguments.callee。以上就是关于Javascriptarguments对象的全部内容了,小伙伴们是否了解透彻呢,简单的说arguments指函数的参数对象(指实际传入的参数)arguments.length指函数的参数对象的长度。arguments[i]指第i个参数的值(第一个为0)