`

JavaScript arguments对象

阅读更多

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

Array.prototype.testArg = "test";
function funcArg() {
    alert(funcArg.arguments.testArg);  
    alert(funcArg.arguments[0]);
}

alert(new Array().testArg); // result: "test"
funcArg(10);                // result: "undefined"  "10"

 

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

function f(a, b, c){
    alert(arguments.length);   // result: "2"
    a = 100;
    alert(arguments[0]);       // result: "100"
    arguments[0] = "qqyumidi";
    alert(a);                  // result: "qqyumidi"
    alert(c);                  // result: "undefined"
    c = 2012;
    alert(arguments[2]);       // result: "undefined"
}

f(1, 2);

 

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

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

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

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

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

function f(a){
    return a + 10;
}

function f(a){
    return a - 10;
}

// 在不考虑函数声明与函数表达式区别的前提下,其等价于如下

var f = function(a){
    return a + 10;
}

var f = function(a){
    return a - 10;
}

 

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

        如下:

function count(a){
    if(a==1){
        return 1;
    } 
    return a + arguments.callee(--a);
}

var mm = count(10);
alert(mm);

 

文章来源:http://www.cnblogs.com/lwbqqyumidi/archive/2012/12/03/2799833.html

分享到:
评论

相关推荐

    javaScript arguments 对象使用介绍

    实际上,函数体内可以通过 arguments 对象来接收传递进来的参数。 代码如下: function box() { return arguments[0]+’ | ‘+arguments[1]; //得到每次参数的值 } alert(box(1,2,3,4,5,6)); //传递参数 ...

    arguments对象的使用

    在函数定义时没有形参名称时,向函数传递参数的使用方法。 实例演示了arguments对象的使用方法。

    Javascript中arguments对象详解

    在上篇文章中我们讨论了javascript中的默认参数,这篇文章,我们来讨论下javascript的arguments参数...幸运的是,javascript有一个arguments对象,可以来处理上述情况。arguments对象是一个类数组对象,想了解argume

    Javascript中arguments对象的详解与使用方法

    ECMAScript中的函数并不介意传递的参数有多少,也不介意是什么类型。由于JavaScript允许函数有不定数目的参数,所以我们需要一种机制,可以在 函数体内 ...这篇文章将详细介绍Javascript中的arguments对象和使用方法。

    javascript内置对象arguments详解

    主要介绍了javascript内置对象arguments,实例讲解arguments是什么怎么用,需要的朋友可以参考下

    跟我学习javascript的arguments对象

    1、什么是arguments arguments 是是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,...javascript函数体内,arguments像数组(并不是真的数组,是一个Arguments对象,再次强调)一样,有length属性,可以代表

    Javascript学习笔记之函数篇(四):arguments 对象

    JavaScript中arguments函数对象是该对象代表正在执行的函数和调用它的函数的参数。JavaScript 函数中 arguments 为特殊对象,无需明确指出参数名,就能访问它们。

    深入解析JavaScript中的arguments对象

    所有的函数都有一个自己的arguments对象,用来储存它实际接受到的参数,而不局限于函数声明时所定义的参数列表。它不是数组却类似数组,具有数组一样的访问性质及方式,可以由arguments[n]来访问对应的单个参数的值...

    Javascript中的arguments对象

    arguments对象:函数对象内,自动创建的专门接收所有参数值得类数组对象。 arguments[i]: 获得传入的下标为i的参数值 arguments.length: 获得传入的参数个数! 重载:  程序中可定义多个相同函数名,不同参数列表...

    JavaScript的arguments对象应用示例

    arguments 对象 在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。 例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个...

    JavaScript中arguments和this对象用法分析

    js函数不介意定义多少参数,也不在乎传递进来多少参数,也就是说,即使定义的函数只接收2个参数,在调用时候也未必传递2个参数,因为js的函数参数在内部使用一个数组表示的,在函数体内可以通过arguments对象访问此...

    xiangxiong#blog#JavaScript深入之类数组对象与arguments1

    JavaScript深入之类数组对象与argumentsJavaScript深入系列第十三篇,讲解类数组对象与对象的相似与差异以及arguments的注意要点类

    深入浅析JavaScript中的arguments对象(强力推荐)

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

Global site tag (gtag.js) - Google Analytics