JavaScript arguments对象

1、在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。可以通过如下代码得以证实(当然,实际上,在函数funcArg中,调用arguments是不必要写成funcArg.arguments,直接写arguments即可)。

1 Array.prototype.testArg = "test";
2 function funcArg() {
3     alert(funcArg.arguments.testArg);
4     alert(funcArg.arguments[0]);
5 }
6
7 alert(new Array().testArg); // result: "test"
8 funcArg(10);                // result: "undefined"  "10"

2、arguments对象的长度是由实参个数而不是形参个数决定的。形参是函数内部重新开辟内存空间存储的变量,但是其与arguments对象内存空间并不重叠。对于arguments和值都存在的情况下,两者值是同步的,但是针对其中一个无值的情况下,对于此无值的情形值不会得以同步。如下代码可以得以验证。

 1 function f(a, b, c){
 2     alert(arguments.length);   // result: "2"
 3     a = 100;
 4     alert(arguments[0]);       // result: "100"
 5     arguments[0] = "qqyumidi";
 6     alert(a);                  // result: "qqyumidi"
 7     alert(c);                  // result: "undefined"
 8     c = 2012;
 9     alert(arguments[2]);       // result: "undefined"
10 }
11
12 f(1, 2);

但是在严格模式下与非严格模式下具有区别:

1)非严格模式:

1 !function(a)
2 {
3      arguments[0] = 100;
4      console.log(a);
5 }(1);
6 //a:100

2)严格模式下:

!function(a)
{
        ‘use strict‘ //使用严格模式
        arguments[0] = 100;
        console.log(a);
}(1);
// arguments变成了参数的静态副本,无论a传不传,都是存在的,不具有绑定性.
//output:1

3)严格模式第二种情况:

!function(a)
{
      ‘use strict‘;
      arguments[0].x=10;
      console.log(a.x);
}
//output:10  可影响属性

3、由JavaScript中函数的声明和调用特性,可以看出JavaScript中函数是不能重载的。

根据其他语言中重载的依据:"函数返回值不同或形参个数不同",我们可以得出上述结论:

第一:Javascript函数的声明是没有返回值类型这一说法的;

第二:JavaScript中形参的个数严格意义上来讲只是为了方便在函数中的变量操作,实际上实参已经存储在arguments对象中了。

另外,从JavaScript函数本身深入理解为什么JavaScript中函数是不能重载的:在JavaScript中,函数其实也是对象,函数名是关于函数的引用,或者说函数名本身就是变量。对于如下所示的函数声明与函数表达式,其实含以上是一样的(在不考虑函数声明与函数表达式区别的前提下),非常有利于我们理解JavaScript中函数是不能重载的这一特性

 1 function f(a){
 2     return a + 10;
 3 }
 4
 5 function f(a){
 6     return a - 10;
 7 }
 8
 9 // 在不考虑函数声明与函数表达式区别的前提下,其等价于如下
10
11 var f = function(a){
12     return a + 10;
13 }
14
15 var f = function(a){
16     return a - 10;
17 }

4、arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。

如下:

1 function count(a){
2     if(a==1){
3         return 1;
4     }
5     return a + arguments.callee(--a);
6 }
7
8 var mm = count(10);
9 alert(mm);

转载自http://www.cnblogs.com/lwbqqyumidi/archive/2012/12/03/2799833.html

时间: 09-11

JavaScript arguments对象的相关文章

理解Javascript参数中的arguments对象

ECMAScript中函数没有标签名的特性,所以ECMAScript函数中没有重载. Javascript中arguments的存在可以弥补javascript中函数没有重载的不足. Javascript中函数中的参数是以数组的形式保存的,所以在JavaScript中调用函数给函数传递的参数时,不会受到我们定义函数时设置的参数个数的限制.也就是说如果我们给一个函数定义了2个参数,我们传递的时候可以不传,可以传一个,也可以传两个,传三个...都可以,不会受函数参数个数的影响.arguments类似

javaScript中的 if(123) | return | arguments对象

<1> <script type="text/javascript"> //----------------------------if语句 //在javascript中,如果if()语句中的条件 为0或者为"" 这样的空字符串,条件就自动转换成false 否则就会自动转换成true var a = 0; if (a) { //当a为0的时候 ,此时a会转换成false 这里什么都不会打印 alert(a); } var b = "

对javascript中的arguments对象的认识

arguments是指向实参对象的引用.它可以使用方括号语法访问它的每一个元素(即第一个元素是 arguments[0] ,第二个元素是 argumetns[1] ,以此类推),使用 length 属性来确定传递进来多少个参数,但是arguments 对象只是与数组类似,它并不是 Array 的实例.这样说可能好抽象.那么我们来看看简单的例子. 若定义了f函数,它只有一个参数时.而传入两个实参时,就需要用到arguments来获取参数. function f(x){ alert(x);//输出1

JavaScript函数的arguments对象、重载问题

一.arguments对象概述: 1.ECMAScript 函数不介意传递进来多少参数,也不会因为参数不统一而错误. 2.函数体内可以通过 arguments 对象来接收传递进来的参数,并且保存函数参数 function box() { return arguments[0]+' | '+arguments[1]+' | '+arguments[5]; //得到每次参数的值,最后结果是1 | 2 | 6 } alert(box(1,2,3,4,5,6)); //传递参数 二.arguments

JavaScript arguments类数组

1. 什么是类数组 arguments 是一个类数组对象.代表传给一个function的参数列表.  我们来传一个实例. function printArgs() { console.log(arguments); } printArgs("A", "a", 0, { foo: "Hello, arguments" }); // ["A", "a", 0, Object] 再看看 arguments 表示的

JavaScript的对象——灵活与危险

没有哪种数据结构比JavaScript的对象更简单灵活了.作为一个弱动态类型语言,JavaScript对对象的属性没有任何约束, 这带来的结果就是,在使用的时候很爽,想加啥属性直接加上去就行了,根本没有类或模板的限制, 想读啥属性直接"点"出来就行了,写出来那是相当简洁:然而这样的代码在运行的时候呢-- JavaScript这种灵活性最大的一个问题也是没有约束.比如一个网店系统有两个部分,一部分产生订单对象, 另一部分拿到订单对象来展示.咱们前端程序员自然是干后面展示那部分事儿的,比如

JavaScript实现对象的深度克隆【简洁】【分享】

JavaScript实现对象的深度克隆 代码实现如下: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>clone</title> 6 7 <script type="text/javascript"> 8 //对象深度克隆方法 9 10 11 ////

javascript arguments(转)

什么是arguments arguments 是是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的.所有主要的js函数库都利用了arguments对象.所以agruments对象对于javascript程序员来说是必需熟悉的. 所有的函数都有属于自己的一个arguments对象,它包括了函所要调用的参数.他不是一个数组,如果用typeof arguments,返回的是’object’.虽然我们可以用调用数据的方法来调用arguments.比如length,还有

javascript 判断对象类型

typeof typeof是一个一元运算符,它返回的结果 始终是一个字符串,对不同的操作数,它返回不同的结果. 此表总结了typeof所有可能的返回值: 操作数类型 返回值 undefined "undefined" Null "object" Boolean "boolean" Number "number" String "string" 函数对象 "function" E4X XM