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 相关文章推荐
js页面跳转常用的几种方式
Nov 25 Javascript
详解JavaScript中的异常处理方法
Jun 16 Javascript
Jquery ajax基础教程
Nov 20 Javascript
JavaScript实现显示函数调用堆栈的方法
Apr 21 Javascript
AngularJS 实现弹性盒子布局的方法
Aug 30 Javascript
JavaScript实现翻页功能(附效果图)
Feb 16 Javascript
原生JS上传大文件显示进度条 php上传文件代码
Mar 27 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
Feb 07 Javascript
解决linux下node.js全局模块找不到的问题
May 15 Javascript
深入了解Hybrid App技术的相关知识
Jul 17 Javascript
axios异步提交表单数据的几种方法
Aug 11 Javascript
js实现简单扫雷
Nov 27 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,ajax实现分页
2008/03/27 PHP
PHP的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
js调用AJAX时Get和post的乱码解决方法
2013/06/04 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
简单了解JavaScript arguement原理及作用
2020/05/28 Javascript
python 简易计算器程序,代码就几行
2009/08/29 Python
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python如何实现MySQL实例初始化详解
2017/11/06 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Python3安装pip工具的详细步骤
2019/10/14 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
党课培训主持词
2014/04/01 职场文书
诚信考试标语
2014/06/24 职场文书
预备党员自我评价范文
2015/03/04 职场文书
关于调整工作时间的通知
2015/04/24 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
Go语言设计模式之结构型模式
2021/06/22 Golang
Java中的Kotlin 内部类原理
2022/06/16 Java/Android
Vue router配置与使用分析讲解
2022/12/24 Vue.js