js中的arguments

arguments是JavaScript里的一个内置对象,是指向实参对象的引用,它很古怪,也经常被人所忽视,但实际上是很重要的。所有主要的js函数库都利用了arguments对象,所以agruments对象对于javascript程序员来说是必需熟悉的。

JS本身并没有重载函数的功能,但Arguments对象能够模拟重载,JS中每个函数都会有一个Arguments对象实例arguments,arguments是收到的实参副本,在词法分析中, 首先按形参形成AO的属性,值为undefined,当实参传来时, 再修改AO的相应属性,可以用数组下标的方式"[]"引用arguments的元素,arguments.length为函数实参个数,arguments.callee引用函数自身;arguments不是一个数组,如果用typeof arguments,返回的是’object’。虽然我们可以用调用数据的方法来调用arguments。比如length,还有index方法。但是数组的push和pop对象是不适用的。

arguments的特性和使用方法
1.特性:arguments对象和Function是分不开的,因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。
2.使用方法:虽然函数的arguments对象并不是一个数组,但其访问单个参数的方式与访问数组元素的方式相同,索引n实际上是arguments对象的0…n 属性的其中一个参数;虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同;例如:arguments[0],arguments[1],。。。。。。。。arguments[n];在js中不需要明确指出参数名就能访问它们,例如:

function test(){
var s;
for(int i=0;i<arguments.length;i++)
{s+=arguments[i]+",";}
return s;
}
test("name","age")
输出结果:
name,age

我们知道每一个对象都有自己的属性,arguments对象也不例外,首先arguments的访问犹如Array对象一样,用0到arguments.length-1来枚举每一个元素;下面我们来看看callee属性,返回正被执行的Function对象,也就是所指定的Function对象的正文;callee属性是arguments对象的一个成员,仅当相关函数正在执行时才可用。callee属性的初始值就是正被执行的Function对象,这允许匿名的递归函数。

var sum=function(n){
if(1==n) {
   return 1;
} else {
  return n + arguments.callee(n-1);

  }
}
alert(sum(6));

通俗讲就是,arguments对象大多用来针对同个方法多处调用并且传递参数个数不一样时进行使用。根据arguments的索引来判断执行的方法。

arguments的用法和特性基本就是这么多了;可能callee属性用到的比较少,但是如果自己封装或者写一些js的时候,除了callee的东西基本都会用到。

时间: 2024-10-02 22:15:28

js中的arguments的相关文章

[转载]js中的arguments,caller,callee,apply

[出自]http://hi.baidu.com/glaivelee/blog/item/42fc2030d836f391a9018ebb.html 在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments 该对象代表正在执行的函数和调用它的函数的参数. [function.]arguments[n]参数function :选项.当前正在执行的 Function 对象的名字. n :选项.要传递给 Function 对象的从0开始的参数值索引.

JS中使用变量保存arguments对象的方法_javascript技巧

迭代器(iterator)是一个可以顺序存取数据集合的对象.其一个典型的API是next方法.该方法获得序列中的下一个值. 迭代器示例 题目:希望编写一个便利的函数,它可以接收任意数量的参数,并为这些值建立一个迭代器. 测试代码好下: var it=values(,,,,,,,,); it.next();// it.next();// it.next();// 分析:由于values函数需要接收任意多个参数,这里就需要用到上一节讲到的构建可变参数的函数的方法.然后里面的迭代器对象来遍历argum

JS中call/apply、arguments、undefined/null方法详解_javascript技巧

a.call和apply方法详解 -------------------------------------------------------------------------------- call方法: 语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象. 说明: call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指

js中与变量相关的一些知识

来补充一点上一篇文章 js变量初探 中漏掉的知识点: 1.变量的定义与声明中常见问题: (1)用var关键字声明的变量,未经初始化时,保存的是一个特殊的值-undefined,变量初始化仅仅是给变量赋一个值 (2)当使用var关键字声明了一个变量时,创建的这个变量是不可配置的,也就是说这个变量无法通过delete运算符删除:在严格模式下,使用delete运算符删除var关键字声明的变量会导致SyntaxError. (3)省略var关键字会导致定义一个全局变量,但是不推荐这种做法.在严格模式下,

js中的函数function

    js的function对象在调用过程中具有一个arguments的属性,它是由脚本解释器创建的(这也是arguments创建的唯一方式).arguments属性可以看作是一个Array对象,它有length属性,可以通过序号访问每一个参数,而且通过argument的callee属性可以获取对正在执行的Function对象的引用.如下: function factorial(n){ if(n<=n){ return 1; }else{ return n*arguments.callee(n

js 传递函数: JS中setInterval、setTimeout不能传递带参数的函数的解决办法

在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决.一.采用字符串形式:--(缺陷)参数不能被周期性改变setInterval("foo(id)",1000);二.匿名函数包装 (推荐)window.setInterval(function()    {foo (id);    }, 1000);   这样就可以周期性执行foo(id)这个函数,而且把变量id传递进去:三.定义返回无参函数的

js中方法重载如何实现?以及函数的参数问题

js中没有办法直接实现方法重载,但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载,具体示例如下   都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了. 但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载. 例如: 复制代码 代码如下: function Add(firstnumber,sencondnumber) { return firs

JS中获取函数调用链所有参数的方法

  这篇文章主要介绍了JS中获取函数调用链所有参数的方法,本文直接给出代码示例,需要的朋友可以参考下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function getCallerArgument(){ var result = []; var slice = Array.prototype.slice; var caller = arguments.callee.caller;   while(caller){ result = result.conca

js中日期的加减法

  JavaScript实现日期加减计算功能代码实例,因为在js中没有类似C#中的AddDays方法,所以要想实现日期加减的话,就需要自己写函数来实现. 今天就算对JS中日期的加减法做个总结,一共两步 第一步,引入date.format.js,这个JS的作用是将日期转为指定的格式,代码如下 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37