码迷,mamicode.com
首页 > Web开发 > 详细

js 的arguments的一些理解资料

时间:2016-04-19 06:07:41      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

初学js的时候,对arguments这个东西常见,就是搞不清他的意思~ 下面是我找到的一些资料和我的理解,终于弄懂了这个家伙

    首先arguments指向实参对象

  在函数体内,标识符arguments是指向实参对象的引用,实参对象是一个类数组对象 arguments[0],arguments.length,类数组不是数组,虽然也有数组的前面这两种属性,具体判断可以使用instanceof来判断一下

instanceof 用于判断一个实例是否是某种类型
在 typeof 方法返回 “object” 的情况下,instanceof 方法还是很有用的。

arrayLike instanceof Array

 

 // false
其值是布尔值那么问题来了

arguments是什么?
1.  arguments是收到的实参副本
  在词法分析中, 首先按形参形成AO的属性,值为undefined
  当实参传来时, 再修改AO的相应属性.
2:并把所有收到实参收集起来,放到一个arguments对象里
  function t(a,b,c){},
  调用时: t(1,2,3,4,5) 5个参数,这里传入了5个参数
  此时 , AO属性只有a,bc,3个属性, 但是arguments里有1,2,3,4,5, 所有的值,这个arguments就用来存储传入的所有参数

  对于超出形参个数之外的实参, 可以通过arguments来获得
3.   arguments 的索引 从 0, 1,2,....递增,与实参逐个对应
4.  arguments.length 属性代表实参的个数
5.  arguments一定不是数组, 是长的比较像数组的一个对象,虽然也有length属性
  6:arguments每个函数都会有,因此,arguemnts只会在内部找自身的arguments,
  无法引用到外层的arguments
 

 1  <script type="text/javascript">
 2   // 求圆形面积,矩形面积, 三角形面积
 3   function area () {
 4   if(arguments.length == 1) {
 5   alert(3.14 * arguments[0] * arguments[0]);
 6   } else if(arguments.length == 2) {
 7   alert(arguments[0] * arguments[1]);
 8   } else if(arguments.length == 3) {
 9   alert(arguments[0] + arguments[1] + arguments[2]);
10   } else {
11   return null;
12   }
13   }
14   area(10,20,30);
15   
16   </script>

 

下面是W3C上的一些解释

arguments 对象

在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。

例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。

因此,无需明确命名参数,就可以重写函数:

function sayHi() {

  if (arguments[0] == "bye") {

    return;

  }

 

  alert(arguments[0]);

}

检测参数个数

还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。

下面的代码将输出每次调用函数使用的参数个数:

 1 function howManyArgs() {
 2 
 3   alert(arguments.length);
 4 
 5 }
 6 
 7  
 8 
 9 howManyArgs("string", 45);
10 
11 howManyArgs();
12 
13 howManyArgs(12);

 

上面这段代码将依次显示 "2"、"0" 和 "1"。

注释:与其他程序设计语言不同,ECMAScript 不会验证传递给函数的参数个数是否等于函数定义的参数个数。开发者定义的函数都可以接受任意个数的参数(根据 Netscape 的文档,最多可接受 255 个),而不会引发任何错误。任何遗漏的参数都会以 undefined 传递给函数,多余的函数将忽略。

js 的arguments的一些理解资料

标签:

原文地址:http://www.cnblogs.com/nostic/p/5406472.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!