java script

在Javascript中:参数表示传递给函数使用或操作的值,它可以是常量,也可以是变量,也可以是函数,在函数内部可以通过arguments对象(arguments对象是一个伪数组,属性callee引用被调用的函数)访问所有参数;重点解释下arguments的用法,尽量详细,最好能举例 不详细不给分。。。

arguments在 JavaScript 中,在一个 function 内部可以使用 arguments 对象。该对象中包含了 function 被调用时的实际参数的值。 arguments 对象虽然在功能上有些类似数组(Array),但是它不是数组。 arguments 对象与数组的类似体现在它有一个 length 属性,同时实际参数的值可以通过 [] 操作符来获取。但是 arguments 对象并没有数组可以使用的 push、pop、splice 等 function 。其原因是 arguments 对象的 prototype 指向的是 Object.prototype 而不是 Array.prototype 。使用 arguments 模拟重载Java 和 C++ 语言都支持方法重载(overloading),即允许出现名称相同但是形式参数不同的方法;而 JavaScript 并不支持这种方式的重载。因为 JavaScript 中的 function 对象也是以属性的形式出现的,在一个对象中增加与已有 function 同名的新 function 时,旧的 function 对象会被覆盖。不过可以通过使用 arguments 来模拟重载,其实现机制是通过判断 arguments 中实际参数的个数和类型来执行不同的逻辑。如代码清单 2中所示。
清单 2. 使用 arguments 模拟重载示例
function sayHello() { switch (arguments.length) { case 0: return "Hello"; case 1: return "Hello, " + arguments[0]; case 2: return (arguments[1] == "cn" ? " 你好," : "Hello, ") + arguments[0]; }; } sayHello(); // 结果是 "Hello" sayHello("Alex"); // 结果是 "Hello, Alex" sayHello("Alex", "cn"); // 结果是 " 你好,Alex"
arguments.calleecallee 是 arguments 对象的一个属性,其值是当前正在执行的 function 对象。它的作用是使得匿名 function 可以被递归调用。下面以一段计算斐波那契序列(Fibonacci sequence)中第 N 个数的值的代码来演示 arguments.callee 的使用,见代码清单 3。
清单 3. arguments.callee 示例
function fibonacci(num) { return (function(num) { if (typeof num !== "number") return -1; num = parseInt(num); if (num < 1) return -1; if (num == 1 || num == 2) return 1; return arguments.callee(num - 1) + arguments.callee(num - 2); })(num); } fibonacci(100);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-11
呵呵~~看到有朋友问,所以就顺便写一下,也许还有其他的朋友不知道
arguments 对象用于存储和访问函数的参数。尽管它在函数体内部,也可以用本地 arguments 变量对其进行访问。
这些参数作为数组元素存储,第一个参数作为 arguments[0] 被访问,第二个参数作为 arguments[1]被访问,依此类推。arguments.length 属性表示传递给函数的参数数目。请注意,传递给函数的参数与该函数声明的参数的数目可能不同。
可用性:Actionscrīpt 1.0;Flash Player 5
属性摘要
callee:Object
对当前正在执行的函数的引用。

caller:Object
对调用当前正在执行的函数的函数的引用;如果未从其它函数调用它,则为 null。

length:Number
传递给函数的参数数目。
下面是一些实际使用法(代码直接复制到flash里面就可以了)
function test()
{
var len:Number = arguments.length;
for(var i:Number = 0; i < len; i++)
{
trace("参数类型:" + typeof(arguments[i]))
trace(arguments)
}
}
test(100,"弃天笑");
trace("=====第二次调用,参数不同=====");
test("soda",22,"flash开发工程师");
可以看出,arguments是完整地保存了参数的类型,这样,即使flash不能实现方法的多态,却可以利用arguments接受不同的参数,从而实现不同的效果
输出的结果为:
参数类型:number
100
参数类型:string
弃天笑
=====第二次调用,参数不同=====
参数类型:string
soda
参数类型:number
22
参数类型:string
flash开发工程师本回答被网友采纳
相似回答