文档章节

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函数的默认值设置

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
JavaScript函数内部属性arguments

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

夏诺风
2014/04/19
0
0
js中的prototype和构造函数

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

leo-H
2013/04/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

LSM-Tree 大数据索引技术

一、LSM-Tree概述 核心思想就是放弃部分读能力,换取写入能力的最大化。LSM-Tree ,这个概念就是结构化合并树(Log-Structured Merge Tree)的意思,它的核心思路其实非常简单,就是假定内存...

PeakFang-BOK
33分钟前
1
0
vue.js响应式原理解析与实现

从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染。之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新...

peakedness丶
39分钟前
1
0
Weblogic补丁升级操作步骤

linux平台: weblogic1036 1:停止weblogic服务 2:打FMJJ补丁 a:获取weblogic_home目录并执行命令:export weblogic_home="/weblogic/wls1036_x64",(此目录一般为目录“user_projects”上...

fang_faye
52分钟前
1
0
04-《Apache Tomcat 9 User Guide》之部署项目

1.Introduction Deployment is the term used for the process of installing a web application (either a 3rd party WAR or your own custom web application) into the Tomcat server. 部......

飞鱼说编程
53分钟前
1
0
一位十年的老码农他眼中的区块链

大家可能已经听说过比特币、莱特币、以太币等等,以及它们作为一种新货币在市场上的潜力。 有趣的是,很多投资比特币的人也提到了区块链之类的东西。 显然,这项技术是比特币等其他东西的"基...

小刀爱编程
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部