arguments对象的实例使用
新年第一记,从这里开始,先来个简单的!去年的知识梳理留下了很多尾巴,原因有很多(知识储量不足,懒了,项目多...) lg:都是借口~ 好吧,我承认,这都是借口,今年一定把尾巴清干净!
下面要写的是知识梳理的第一个案例:
- 写一个求和的方法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); //
var num2 = sumFn(2,3,4);
console.log(num2); //
var num3 = sumFn();
console.log(num3); //0
var num4 = sumFn(1,'e',6);
console.log(num4); //
到这里,不知道你对这个例子理解了没有, lg: 这么好的东西,兼容性怎么样呢? 哈哈,这么吊炸天的东西,兼容性还特别的好,你说气不气人,经测试,支持所有浏览器!
好了,它是对象,它也有对象,但是我还没有对象,呜呜呜~~~,我要去找对象去了!
行文仓促!有理解的不正确的或者是遗漏的东西,万望批评指正!不胜感激!
6K)L)]~VIZK.gif)
6K)L)]~VIZK.gif)
出处:http://www.cnblogs.com/liugang-vip/p/5201146.html
arguments对象的实例使用的更多相关文章
- 函数, arguments对象, eval,静态成员和实例成员
函数创建: 3种创建函数的方式 * 直接声明函数 function funcName(/*参数列表*/){ //函数体 } * 函数表达式 var funcName = function(){ ...
- [Effective JavaScript 笔记]第23条:永远不要修改arguments对象
arguments对象并不是标准的Array类型的实例.arguments对象不能直接调用Array方法. arguments对象的救星call方法 使得arguments可以品尝到数组方法的美味,知 ...
- python—类对象和实例对象的区别
最近在对RF的通讯层的模块进行封装,需要将之前放在类似main里面的一个方法,如下所示:这段代码是开发提供,用于接口测试,模拟底层通讯,具体的通讯是在dll内,python这边只是做了个封装让RF进行 ...
- JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) { return i1 + i2;//如果不写return返回 ...
- arguments对象,caller 和 callee
arguments对象是比较特别的一个对象,arguments非常类似Array,但实际上又不是一个Array实例. 它指的是函数对象里的参数,且只能在函数内部使用. 使用 检测函数的参数个数,引用属 ...
- jacascript 函数参数与 arguments 对象
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 调用函数时,实参和形参需要一一对应,但如果参数多了的话,会很苦恼: 我们可以用键值对(字面量对象)的方式传 ...
- 函数的形参和实参之arguments对象
当函数调用函数时候传入的实参比函数声明时候制定的形参要少时候,剩余的形参就设置成了undefined.例如 function getPropertyNames(o,/*optional*/a){ va ...
- JavaScript-创建日志调试对象(面向对象实例)
参考自http://www.2cto.com/kf/201312/261990.html IC.js文件 自己封装的js类库 /** * * @authors Your Name (you@examp ...
- JavaScript arguments对象
1.在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性.arguments非常类似Array,但实际上又不是一个Array实例.可以通过如下代码得以证 ...
随机推荐
- Office 365系列(-)
昨天参加上海微软TechED技术大会,看见很多传说中的大牛,听了涂曙光老师等人的讲座,激情澎湃啊,看见他们对技术以及程序员社区的投入及激情,十分敬佩.自己搞IT行业也已经10多年了,平常都很少写博客和 ...
- elasticsearch从入门到出门-05-集群之踩坑
自己搭的集群, 设备: win10 + ubuntu 16 的虚拟机一个: 下载的版本:elasticsearch-5.2.0 win10 解压下就好了,不说了. ubuntu 上,我想说多了都是泪! ...
- 加密php源代码
<?php function RandAbc($length = "") { //返回随机字符串 $str = "ABCDEFGHIJKLMNOPQRSTUVWXY ...
- The Princess and the Pea,摘自iOS应用Snow White and more stories
Once upon a time there was a prince who wanted to marry a real princess.从前,有个王子想和真正的公主结婚. He looked ...
- JVM相关的几个基本概念
1.虚拟机是指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统 2.常见的虚拟机有VMWare,Visual Box,JVM等 VMWare或者Visual Box模拟的 ...
- 第一个Spring Boot程序启动报错了
创建完成第一个Spring Boot项目后,准备运行,尝一下胜利的果实. 启动日志如下 . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ...
- l如何把SQLServer表数据导出CSV文件,并带列名
http://jingyan.baidu.com/article/4b07be3c466b5d48b280f37f.html 微信公众号:
- SAP basis 常用事物
1.创建一个新的用户 完成client创建和拷贝后,在开始正式工作之前,需要创建新的用户. 用这个用户进行工作.默认ddic和sap*用户不要用于实际的业务. 创建用户的过程很简单,只要以su01 ...
- Apache Shiro 使用手册(二)Shiro 认证(转发:http://kdboy.iteye.com/blog/1154652)
认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一. ...
- python基础22------python基础之基于tcp和udp的套接字
一.TCP套接字 1.low版tcp套接字 服务器端 客户端 2.改进版tcp套接字 服务端 客户端 二.UDP的套接字 服务器 客户端 注:udp的套接字可以支持多个客户端同时访问,但tcp套接字就 ...