zoukankan      html  css  js  c++  java
  • js 的arguments的一些理解资料

    初学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 传递给函数,多余的函数将忽略。

  • 相关阅读:
    IntelliJ IDEA 2019.2.3 x64版本设置Run Dashboard
    IntelliJ IDEA 使用Tomcat后在控制台出现乱码'中文乱码 “淇℃伅”“涓夋湀”
    window10家庭版管理员权限问题
    用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
    IntelliJ IDEA导入已有的项目的方法
    从养孩子谈谈 IO 模型(一)
    写作之路,以梦为马,不负韶华
    数据库核心:索引,你知道多少?
    面试:啥是数据倾斜?就是数据歪啦!
    ​面试:业务开发中你用到了哪些算法(续)?
  • 原文地址:https://www.cnblogs.com/nostic/p/5406472.html
Copyright © 2011-2022 走看看