下面要写的是知识梳理的一个案例:
  1. 写一个求和的方法sumFn,不管传递的参数有什么,都能将最终的和算出来,并且返回给函数外部使用。(要求:一个参数都不传默认结果为0,对于传递的非正常数字的参数不与累加操作);
这个案例主要要考察的知识点是 arguments 参数,来给个特写,什么意思呢?
arguments 参数是一个比较特殊的对象,是当前函数的一个内置属性,它非常想Array,但却不是Array  lg:说的什么,还是不懂~  额,好吧,例子胜过一切雄辩,咱们举几个栗子来看看:
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function abc(a,b,c){
       //看看arguments是什么
    console.log(arguments);
}
 
abc(1,2,3)  ;  //[1,2,3] 这不是数组吗
 
 
function abc(a,b,c){
       //看看arguments是什么类型的
    console.log(typeof arguments)  
}
 
abc(1,2,3)  ;  //object   这是对象,不是数组
 
看看,是不是有点意思,似数组非数组  lg:那它怎么用呢~  这个问题问的好,看下面代码:
1
2
3
4
5
6
7
8
9
function abc(a,b,c){
    var len = arguments.length;
    console.log(len);
    console.log(arguments[0]);
    console.log(arguments[1]);
}
abc(1,2,3); // 3 , 1 , 2
 
//长度为3,第一个值为1,第二个值为2...  看来是具有对应关系的
lg:就只有这2下子?一点都不好玩~   呵,你还急了,当然不只这两下子啊,它有一个非常实用的功能,就是在函数中,无需明确指出参数名,arguments能直接访问它,你说屌不屌,耳听为虚,眼睛为使:
1
2
3
4
5
6
7
8
function abc(){
    var a = arguments;
    var num = arguments[0] + arguments[1] + arguments[2]; //这里可以用循环,为方便查看,拆开了写,你懂的
    console.log(num);
}
abc(1,2,3); // 6  说明可以获取
 
//正常来说,函数没有参数,应该是要报错的,如果能成功运行,说明它具备这个神级
lg:果然了得啊,那它还有没有其他的吊炸天技能呢? 当然有啦!arguments对象中有一个非常有用的属性:callee。arguments.callee返回此arguments对象所在的当前函数引用。在使用函数递归调用时推荐使用arguments.callee代替函数名本身。举个栗子:
1
2
3
4
5
6
7
8
9
function abc(a){
  if(a==1){
    console.log(arguments.callee); //直接输出当前函数
    return 1;
  }
  return a + arguments.callee(--a);
}
         
var mm = abc(10);
console.log(mm); // 55<br><br>//arguments.callee(--a) 执行了递归调用,这样就完成了1~9的累加
看到这里,上面说的例子应该就不难写了吧,来跟着我左手右手一个慢动作:
 
function sumFn(){
  var arg = arguments;
 var sum = 0;
  if(arg == '' || arg == ' ' || arg ==null){
    sum = 0;
  }else{
    for(var i=0;i<arg.length;i++){
      if(isNaN(arg[i]) || arg[i] == '' || arg[i] ==' '){
        sum = sum;
      }else{
        sum +=arg[i];
      }
    }
  }
  return sum;
}

var num1 = sumFn(2) + sumFn(3);
console.log(num1); //5

var num2 = sumFn(2,3,4);
console.log(num2); //9

var num3 = sumFn();
console.log(num3); //0

var num4 = sumFn(1,'e',6);
console.log(num4); //7

 
到这里,不知道你对这个例子理解了没有,  lg: 这么好的东西,兼容性怎么样呢?  哈哈,这么吊炸天的东西,兼容性还特别的好,你说气不气人,经测试,支持所有浏览器!
好了,它是对象,它也有对象,但是我还没有对象,呜呜呜~~~,我要去找对象去了!
行文仓促!有理解的不正确的或者是遗漏的东西,万望批评指正!不胜感激!

arguments 参数的更多相关文章

  1. JS中的for/in语句和arguments参数

    在js应用中,有时候我们会遇到希望定义一个函数可以被不同情况调用,比如参数个数不固定的情况. 可以使用for/in语句和arguments参数解决. 举个简单例子:定义一个计算总和的函数,需要计算的数 ...

  2. 《无所不能的JavaScript编程系列:arguments 参数对象》

    前言:无所不能的JavaScript JavaScript起源于Netscape公司的LiveScript语言,这是一种基于对象和事件驱动的客户端脚本语言,最初的设计是为了检验HTML表单输入的正确性 ...

  3. rabbitmq queue_declare arguments参数注释

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_26656329/article/details/77891793说明官方文档 在创建queue ...

  4. js中的arguments 参数

    function sum (a,b) { } //1,2 为实参 3,4 为形参 sum(1,2,3,4) 打印参数长度 arguments.length 函数实参长度 函数名.length

  5. js arguments参数

    在调用函数时,浏览器每次都会传递进两个隐含的参数:      1.函数的上下文对象 this      2.封装实参的对象 arguments         - arguments是一个类数组对象, ...

  6. javascript arguments参数问题

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

  7. RabbitMQ arguments参数设置

    有发布端.消费端.消息路由.消息生命周期和身份认证标识等模块参数的设置. 具体请参考地址:http://www.rabbitmq.com/extensions.html

  8. arguments参数对象

    //求任意个数的和 function test() { var sum = 0; for (var i = 0; i < arguments.length; i++) { sum += argu ...

  9. 六. Default arguments 参数默认值

    示例: 注意点:函数是会默认声明参数变量的,所以不需要再重新声明一次,否则会报错 错误示例如下: 函数参数的传值方法: 需要注意的是:如果要给第二个参数传值,那第一个参数要传undefined,而不能 ...

随机推荐

  1. shell实战之case语句的选择提示

    知识点包括:case语句,cat多行输入,break和exit的区别,wget断点续传,while中断条件写法,函数的使用方法 #!/bin/bash echo "\n1. 本机容器情况如下 ...

  2. oracle创建表空间、用户、权限

    原链接:https://www.cnblogs.com/wxm-bk/p/6510654.html oracle 创建临时表空间/表空间,用户及授权   1:创建临时表空间 create tempor ...

  3. SQL查询表结构的语句

    SELECT tableName=CASE WHEN a.colorder=1 THEN d.name ELSE '' END ,表说明 =CASE WHEN a.colorder=1 THEN IS ...

  4. Word2Vec原理及代码

    一.Word2Vec简介 Word2Vec 是 Google 于 2013 年开源推出的一款将词表征为实数值向量的高效工具,采用的模型有CBOW(Continuous Bag-Of-Words,连续的 ...

  5. 数据结构:广义表的实现(Java)

    广义表的简单理解在这篇博文中:https://blog.csdn.net/lishanleilixin/article/details/87364496,在此不做赘述. Java实现广义表: pack ...

  6. iOS 时区获取问题

    时区缩写 UTC, CST, GMT, CEST 以及转换 UTC是协调世界时(Universal Time Coordinated)英文缩写,是由国际无线电咨询委员会规定和推荐,并由国际时间局(BI ...

  7. 收集vcftools所有用法

    VCFtools用来处理VCF文档. 筛选特定突变 比较文件 总结突变 转化文件格式 验证并合并文件 取突变交集和差集 Get basic file statistics input可以为VCF或BC ...

  8. GeneXus学习笔记——入门篇

    使用GeneXus做开发做了有一段时间了 却发现一个问题(O_O)?就是除了相关的Wiki外 网上其他地方的相关资料都很少 于是乎我就想在这记录一些东西 来帮助以后会用到的人(°ー°") 那 ...

  9. LARTC

    大牛的博客 howto ,however, is simplify. another space ip link list ip address show ip route show route -n ...

  10. CountDownLatch的简单实现

    1. @Data public abstract class BaseLatch { private int limit; protected int running; BaseLatch(int l ...