arguments对象不能显式创建,arguments对象只有函数开始时才可用。函数的 arguments 对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同。索引 n 实际上是 arguments 对象的 0…n 属性的其中一个参数。

下面的示例演示了 arguments 对象的用法,arguments对象和Function是分不开的。

function ArgTest(a, b){
 2   var i, s = "The ArgTest function expected ";
 3   var numargs = arguments.length;     // 获取被传递参数的数值。
 4   var expargs = ArgTest.length;       // 获取期望参数的数值。
 5   if (expargs < 2)
 6      s += expargs + " argument. ";
 7   else
 8      s += expargs + " arguments. ";
 9   if (numargs < 2)
10      s += numargs + " was passed.";
11   else
12      s += numargs + " were passed.";
13   s += "\n\n"
14   for (i =0 ; i < numargs; i++){      // 获取参数内容。
15   s += "  Arg " + i + " = " + arguments[i] + "\n";
16   }
17   return(s);                          // 返回参数列表。
18}

以上是arguments对象,由于和Function对象紧密地联系在一起。也就是说每一个函数都有自己的argument属性。下面我们来看看argument属性:为当前执行的 function 对象返回一个arguments 对象,function 参数是当前执行函数的名称,可以省略。

通过 arguments 属性(相对于Function来说),函数可以处理可变数量的参数。arguments 对象的 length 属性包含了传递给函数的参数的数目。对于arguments 对象所包含的单个参数,其访问方法与数组中所包含的参数的访问方法相同。请看下面的例子:

function ArgTest(){
 2   var i, s, numargs = arguments.length;
 3   s = numargs;  
 4   if (numargs < 2)
 5      s += " argument was passed to ArgTest. It was ";
 6   else
 7      s += " arguments were passed to ArgTest. They were " ;
 8   for (i = 0; i < numargs; i++)
 9      {
10         s += arguments[i] + " ";
11      }
12   return(s);
13}

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

1function factorial(n){
2  if (n <= 0)
3  return 1;
4  else
5    return n * arguments.callee(n - 1)
6}
7print(factorial(3));

到这里基本上把arguments对象给讲完了,不知还有其他的东西吗?其实很多东西我们都已经很熟悉了,除了上述的callee属性外,其他的我们都时不时在应用他们。

原文链接:

[js对象]JS入门之arguments对象

【JavaScript】浅析JavaScript中arguments对象的使用的更多相关文章

  1. js中arguments对象和this对象

    js中arguments对象和this属性 如果不注重复习,花时间准备的材料毫无意义 arguments对象和this对象都是对象 直接来代码 <!DOCTYPE html> <ht ...

  2. JavaScript教程——函数(arguments 对象)

    arguments 对象 定义 由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数.这就是arguments对象的由来. arguments对象包含了 ...

  3. 创建一个JS函数,运用JS中arguments对象

    Javascript中有个内置的arguments对象. arguments对象包含了参数调用的参数数组. <p>查找最大的数.</p> <p id="demo ...

  4. 在js中arguments对象的理解

    一.在函数调用的时候,浏览器每次都会传递进两个隐式参数 函数的上下文对象this 封装实参的对象arguments 二.arguments 对象 arguments 对象实际上是所在函数的一个内置类数 ...

  5. JS中arguments对象

    与其他程序设计语言不同,ECMAScript 不会验证传递给函数的参数个数是否等于函数定义的参数个数. 开发者定义的函数都可以接受任意个数的参数而无需跟定义的函数相匹配(根据 Netscape 的文档 ...

  6. JavaScript 删除数组中的对象

    1.获得对象在数组中的下标 function (_arr,_obj) { var len = _arr.length; for(var i = 0; i < len; i++){ if(_arr ...

  7. 你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?

    JavaScript 中 Arguments 对象的用途总结. 前言 相信我们很多人在代码开发的过程中都使用到过一个特殊的对象 -- Arguments 对象. 在实际开发中,Arguments 对象 ...

  8. javascript学习笔记02--面向对象学习

    js面向对象编程 1.  javascript 是一种基于对象的编程    object-based(基于对象):遇到的所有对象都是对象2.javascript没有类class,但是有新的原型对象,习 ...

  9. arguments 对象的老历史

    引题:为什么 JavaScript 中的 arguments 对象不是数组 http://www.zhihu.com/question/50803453 JavaScript 1.0 1995 年, ...

随机推荐

  1. 【Python】torrentParser1.03

    #------------------------------------------------------------------------------------ # torrentParse ...

  2. JavaScript:如何获得 Private、Privileged、Public 和 Static 成员(属性和方法)【翻译+整理】

    本文内容 背景 把我们的对象放在一起 添加一个私有(Private)的属性 添加一个特权(Privileged)的方法 添加一个公共(Public)的属性和方法 添加一个静态(Static)的属性 我 ...

  3. format ZKFC失败

    at org.apache.hadoop.ha.ActiveStandbyElector$WatcherWithClientRef.waitForZKConnectionEvent(ActiveSta ...

  4. Mysql删除所有表

    SELECT CONCAT('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_s ...

  5. EventSource 对象用于接收服务器发送事件通知,是网页自动获取来自服务器的更新

    //--------------------------------客户端代码----------------------------- if(typeof(EventSource) !== &quo ...

  6. tomcat7配置

    <?xml version='1.0' encoding='utf-8'?><!-- Licensed to the Apache Software Foundation (ASF) ...

  7. angularjs component

    Component https://docs.angularjs.org/guide/component component本质上就是directive. This is a shorthand fo ...

  8. MySQL 主从错误

    1: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log fil ...

  9. 使用 loop device 制作安装镜像

    看了下,手上的镜像中,文件系统才 100 多兆,但是整个镜像居然要 4G, 这意味着,我每次安装这个镜像到 SD 卡都要花很多没必要的时间. 所以,我提取了一些关键内容,然后,准备重新打包镜像. 1. ...

  10. ES6 新增数据类型检测 Set Map Proxy

    检测代码方法 function isNative(api){ return /native code/.test(api.toString())&&typeof api !== 'un ...