javascript arguments 传递给函数的隐含参数


Posted in Javascript onAugust 21, 2009

本人第一次看到这个东东的时候,以为就是“变相”的普通参数,只不过不用在定义函数的时候明确声明而已。
不过,代码是廉价的(Code is cheap.)看代码:
function funcTest(a, b) {
alert(a);
alert(b);
for ( var i = 0 ; i < arguments.length; i ++ ) {
alert(arguments[i]);
}
}
function test() {
funcTest( 1 , 2 , 3 ); // 放到html页进行执行
}
function funcTest(a, b) {
alert(a);
alert(b);
for ( var i = 0 ; i < arguments.length; i ++ ) {
alert(arguments[i]);
}
}
function test() {
funcTest( 1 , 2 , 3 ); // 放到html页进行执行
}
代码运行后怎么样,不错,这里的length实在是很奇怪,对不对?我们来看书中是怎么说的,“代码运行时会依次显示:1,2,1,2,3。因此,在定义函数的时候,即使不指定参数列表,仍然可以通过arguments引用到所获得的参数,这给编程带来了很大的灵活性”。没有比这句更加精辟的阐释了。
看到这里,我们可能都有一个疑问(如果你稍微具备一点js编程知识的话),arguments参数是不是js数组对象的一个实例?下面的代码会帮你解决这个疑点:
Array.prototype.testArg = " test arguments " ;
function funcArg() {
alert(arguments.testArg);
}
function test() {
alert( new Array().testArg);
funcArg();
}
Array.prototype.testArg = " test arguments " ;
function funcArg() {
alert(arguments.testArg);
}
function test() {
alert( new Array().testArg);
funcArg();
}
代码运行结果是先弹出"test arguments"和"undefined",为什么funcArg调用返回“undefined”?看到这里相信你对上面的疑问已经消除。
到这里你以为你掌握了arguments的全部?那就太小瞧js的天才设计者(们)了,下面看另外一个有才的设计:
Q:使用递归来计算1 到n 的自然数之和
A1:
function sum(n) {
if ( 1 == n) return 1 ;
else return n + sum(n - 1 );
}
function test() {
alert(sum( 100 )); ; // 放到html页进行执行
} function sum(n) {
if ( 1 == n) return 1 ;
else return n + sum(n - 1 );
}
function test() {
alert(sum( 100 )); ; // 放到html页进行执行
}
A2:
function sum(n) {
if ( 1 == n) return 1 ;
else return n + arguments.callee(n - 1 );
}
function test() {
alert(sum( 100 )); ; // 放到html页进行执行
} function sum(n) {
if ( 1 == n) return 1 ;
else return n + arguments.callee(n - 1 );
}
function test() {
alert(sum( 100 )); ; // 放到html页进行执行
}
A1和A2这两个回答都解决了问题,相信第一种方法是大多数人的常规做法,但是js推荐使用第二种,原书说A1这种方式“其中函数内部包含了对 sum 自身的调用,然而对于JavaScript 来说,函数名仅仅是一个变量名,在函数内部调用sum 即相当于调用一个全局变量,不能很好的体现出是调用自身”,sum都调用sum了,还说“不能很好的体现出是调用自身”,为什么呢?
书到用时方恨少,查书,书上是这么写的:“arguments 对象的另一个属性是callee,它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证函数的封装性,”这话我承认说的有理,我从来都对书本尤其是技术类的书本保持高度的信任,可是这里说“arguments 对象的另一个属性是callee”,这里“arguments ”怎么成“对象”了?标题都说“传递给函数的隐含参数:arguments ”,难道抄书抄错了?查看电子书,靠,复制粘贴还会有错?
对象,对象?对象何其多,下篇找"对象"。

Javascript 相关文章推荐
Javascript与vbscript数据共享
Jan 09 Javascript
javascript forEach通用循环遍历方法
Oct 11 Javascript
灵活应用js调试技巧解决样式问题的步骤分享
Mar 15 Javascript
document.forms用法示例介绍
Jun 26 Javascript
JavaScript中对象property的删除方法介绍
Dec 30 Javascript
jQuery判断数组是否包含了指定的元素
Mar 10 Javascript
JavaScript 事件对象介绍
Apr 13 Javascript
Angular下H5上传图片的方法(可多张上传)
Jan 09 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
Mar 03 Javascript
JavaScript登录验证基础教程
Nov 01 Javascript
小程序实现左滑删除的效果的实例代码
Oct 19 Javascript
uniapp电商小程序实现订单30分钟倒计时
Nov 01 Javascript
javascript 自定义事件初探
Aug 21 #Javascript
IE 下的只读 innerHTML
Aug 21 #Javascript
JS 控制CSS样式表
Aug 20 #Javascript
JS获取父节点方法
Aug 20 #Javascript
javascript 数组排序函数
Aug 20 #Javascript
用Javascript数组处理多个字符串的连接问题
Aug 20 #Javascript
JQUERY 浏览器判断实现函数
Aug 20 #Javascript
You might like
php 文件缓存函数
2011/10/08 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
手写的一个兼容各种浏览器的javascript getStyle函数(获取元素的样式)
2014/06/06 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
简单实现js浮动框
2016/12/13 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
python实现人脸签到系统
2020/04/13 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
Ashford台湾:以折扣价提供奢华的男女用表款
2019/12/04 全球购物
Bonprix法国:时尚、鞋子、家居
2020/12/29 全球购物
餐饮业的创业计划书范文
2013/12/26 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android