文档章节

javascript之arguments对象

指尖残雪
 指尖残雪
发布于 2016/05/22 23:57
字数 455
阅读 3
收藏 0

arguments对象不能显式创建,arguments对象只有函数开始时才可用。函数的arguments对象并不是一个数组,访问单个参数的方式与访问数组元素的方式相同。索引 n 实际上是 arguments 对象的 0…n 属性的其中一个参数。

先看一个例子:

function test(a,b,c,d){        
	return a + b;              
}                              
                               
alert(test(10,20));
输出结果:30

javascript的形参和实参个数可以不同。如果不传参也不会报错alert(test()); 运行后弹出:NaN

function test(a,b,c,d){         
	alert(test.length);         
}                               
test();
输出:4    (a b c d)
function test(a,b,c,d){                    
	alert(arguments.length);               
	// alert(test.length);                 
}                                          
test(10,20);
输出:2     传入的(10,20)

function test(a,b,c,d){              
	alert(arguments[0]);             
	alert(arguments[1]);             
	// alert(arguments.length);      
}                                    
test(10,20);
弹出: 10、20

当传入的参数和函数形参不同的时候,我们可以进行判断: 

function test(a, b, c, d) {                        
	if (test.length == arguments.length) {         
		return a + b;                              
	} else {                                       
		return '参数不正确!';                           
	}                                              
}                                                  
                                                   
test(10, 20);
输出:参数不正确

不建议使用上面判断的方法,因为直接使用函数名会带来不可预料的问题,比如我们把test=null了以后就会执行异常

建议使用下面的方法:arguments.callee

function test(a, b, c, d) {                               
	if (arguments.callee.length == arguments.length) {    
		return a + b;                                     
	} else {                                              
		return '参数不正确!';                                  
	}                                                     
}                                                         
alert(test(10, 20));
arguments 对象 可以访问函数的实际参数,arguments 对象 只能在函数的内部访问和使用,arguments对象 用的最多的 还是做递归操作 ,arguments.callee 对自己本身引用进行递归

function fact(num){                                  
		if(num <=1) return 1 ;                       
		else  return num*arguments.callee(num-1);    
}
var F = fact ;  
fact = null;    
alert(F(5));
fact=null后依然可以输出:120

我们把arguments.callee换成fact

function fact(num) {                      
	if (num <= 1)                         
		return 1;                         
	else                                  
		return num * fact(num - 1);       
}                                         
                                          
//alert(fact(5));                         
var F = fact;                             
fact = null;                              
alert(F(5));
出错:Uncaught TypeError: object is not a function

本文转载自:http://blog.csdn.net/bq1073100909/article/details/48595611

共有 人打赏支持
指尖残雪
粉丝 7
博文 73
码字总数 0
作品 0
上海
后端工程师
arguments 对象的老历史

本文经作者 柯拓 授权转载。原文地址:http://www.cnblogs.com/ziyunfei/p/5890322.html 引题:为什么 JavaScript 中的 arguments 对象不是数组 http://www.zhihu.com/question/50803453 Jav...

_朴灵_
05/14
0
0
js中arguments的作用

在javascript函数体内,标识符arguments具有特殊含义。它是调用对象的一个特殊属性,用来引用Arguments对象。 Arugments对象就像数组,注意这里只是像并不是哈。 javascript函数体内,argum...

Sherlock_z
2014/10/31
0
0
JavaScript函数内部属性arguments

JavaScript高级程序设计(第三版),个人的读书笔记. 在JS函数内部,有两个特殊的对象:arguments和this,我们先讲下arguments。 arguments是一类数组对象,包含着输入函数中的所有参数。除此之外...

夏诺风
2014/04/19
0
0
javascript函数的默认值设置

php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){ return $a+$b; } echo simue(); //输出3 echo simue(10); //输出12 echo simue(10,20); //输出...

freedonn
2014/02/21
0
0
js中的prototype和构造函数

js中没有类的感念,继承也是通过原型链来实现的对象的继承而不是类的继承 Vjeux写的这篇文章应该能帮助我们更好的理解js中原型的工作方式:http://blog.vjeux.com/2011/javascript/how-proto...

leo-H
2013/04/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式:简单工厂模式(静态共产方法模式)

简单工厂的构成包括三个角色: 1)抽象产品类 2)具体产品类(继承抽闲产品类) 3)工厂类(生产具体产品) 具体代码实现 1、抽象产品类 /** * 抽象类 */public abstract class Car ...

京一
2分钟前
0
0
Lombok使用

1 介绍 Lombok是一个简单的Java库,改工具可以通过注解自动地提供一些方法,简化开发。比如编写POJO时需要为每个属性提供getter()方法和setter()方法,这就可以使用Lombok实现。 2 配置 Lomb...

SuperHeroes
11分钟前
0
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
13分钟前
0
0
java虚拟机之内存模型

1. 概述 对于从事 C、C++ 程序开发的人员来说,在内存管理领域,他们既是拥有最高权力的「皇帝」又是从事基础工作的「劳动人民」 --- 既拥有每个对象的「所有权」,又担负着每一个对象生命开...

firepation
15分钟前
0
0
解决linux的-bash: ./xx: Permission denied

解决linux的-bash: ./xx: Permission denied 在linux下执行sh文件时提示下面信息: -bash: ./xx.sh: Permission denied解决:chmod 777 xx.sh 1 2 3 4 Linux chmod +755和chmod +777 ......

DemonsI
26分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部