下面要写的是知识梳理的一个案例:
  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. 二手前端入门React项目

    个人对ReactJS这门技术比较感兴趣,在基友的帮助下成功创建了一个React标准前端工程,过程中遇到了不少麻烦,今天作为笔记一般记录一下遇到的问题和解决方案. 基础环境 手头一台Mac 使用OSX系 ...

  2. Linux 服务器加入Windows AD

    背景信息: Windows AD Version: Windows Server 2012 R2 zh-cn 计算机全名:hlm12r2n1.hlm.com 域:hlm.com 域控管理员:stone ...

  3. 钉钉机器人集成Jenkins推送消息模板自定义发送报告

    一.由于公司同样也使用了钉钉.那么在做Jenkins集成自动化部署的时候,也是可以集成钉钉的. 那种Jenkins下载钉钉插件集成,简单设置就可以完成了.我们今天要做的是,定制化的发送消息. 钉钉推送 ...

  4. Android NDK开发及OpenCV初步学习笔记

    https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...

  5. Contest Hunter 1401 兔子与兔子

    1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...

  6. 索引(Awakening!)

    orz写个索引,方便日后复习和补充. 目前笔记还不是很多,而且写得比较烂,望各位到访的巨佬谅解. 大概可以算作一个归纳总结? ……没链接的还没开始写或者没写完,而且不知道什么时候才能写完(咕咕咕) 一 ...

  7. net与树莓派的情缘-安装Redis(四)

    在Linux下安装Redis非常简单,具体步骤如下(官网有说明): .下载源码,解压缩后编译源码. $ wget http://download.redis.io/releases/redis-3.0 ...

  8. WCF系列教程之WCF客户端异常处理

    本文参考自:http://www.cnblogs.com/wangweimutou/p/4414393.html,纯属读书笔记,加深记忆 一.简介 当我们打开WCF基础客户通道,无论是显示打开还是通过 ...

  9. sql在insert时判断有无唯一性冲突

    sql在insert时判断有无唯一性冲突,存在相同主键或唯一索引,则不创建 INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 'fi ...

  10. 逻辑备份,mysqldump,SELECT…INTO OUTFILE,恢复

    逻辑备份 mysqldump mysqldump备份工具最初由Igor Romanenko编写完成,通常用来完成转存(dump)数据库的备份以及不同数据库之间的移植,例如从低版本的MySQL数据库升级 ...