Javascript 函数中的参数使用分析


Posted in Javascript onMarch 27, 2010

首先,在JS中函数也是一种标识符,可以将它赋值给新的变量,也可以通过这个变量来调用。这有点像C语言的函数指针,不过也不完全一样,如下面的代码:

function myfun() { 
alert("funcation call"); 
} 
var fun = myfun; 
fun();

再有一个值得说一下的,就是JS中的函数的参数不一定是严格匹配的,通常的编程经验,比如有这样一个函数 fun(aa,bb),那么我们在调用这个函数的时候就应该给他传递两个参数。但是在JS中,我们可以给他传递任意个参数,1个,3个,等等,都可以。JS中的参数传递,不完全是按照函数声明时指定的那些参数,在每次调用函数的时候,都会有一个命名为arguments的数组,这个数组里面存储了函数调用时,传递进来的所有参数,有了它,我们甚至可以不再函数声明时指定形式参数,如下代码:

function args() { 
if (arguments[0] != undefined) { 
alert(arguments[0]); 
} 
} 
args(); //什么也不输出 
args("hehe"); //弹出参数值

如上所示,arguments数组的每个下标,从0开始一次对应着传递进来的每个参数,如果指定位置没有参数,那么他就会是undefined,
我们可以使用arguments.length来判断传递进来的参数个数,这种方式有时候会很有用,比如,我们可以利用这个特性来模拟C语言的printf函数:

function format() { 
if (arguments.length == 0) { 
return ""; 
} 
var formatter = arguments[0]; 
for (var i = 1; i < arguments.length; i++) { 
formatter = formatter.replace(new RegExp("\\{"+(i-1)+"\\}","gm"), arguments[i]); 
} 
return formatter; 
} 
alert(format("Hello {0},this is the fetures of {1}!","world","javascript"));

上面的代码,简单实现了格式化输出的基本功能,当然,有兴趣的话,还可以把它做得更好 ,最后再说一个吧,arguments还有个callee属性,它代表了当前被调的函数,这个属性值某些情况下还是有点用处的。考虑如下代码:

function sum(num) { 
if (num == 1) { 
return num; 
} else { 
return num + sum(num - 1); 
} 
} 
var mysum = sum; 
alert(mysum(5)); //输出 15 
sum = function() { return 1; }; 
alert(mysum(5)); //输出 6

这是一个递归求和的函数,mysum一开始和sum是同样的函数,如果在程序执行过程中sum函数体被改变了,再调用mysum的结果就会不同,如果将函数改成这样,就不会出现这样的问题啦~

function sum(num) { 
if (num == 1) { 
return num; 
} else { 
return num + arguments.callee(num - 1); 
} 
} 
var mysum = sum; 
alert(mysum(5)); //输出 15 
sum = function() { return 1; }; 
alert(mysum(5)); //输出 15

如上面这样,不管外面的引用怎么改变callee都会指向当前的被调函数,在用JS写递归的时候,这点还是有必要注意一下的,虽然一般不
会出现这种错误,但是如果出了是不太容易发现原因的,会浪费不少时间。

Javascript 相关文章推荐
Js+XML 操作
Sep 20 Javascript
javascript实现设置、获取和删除Cookie的方法
Jun 01 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
Aug 21 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
JavaScript 对象字面量讲解
Jun 06 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 Javascript
Node.js的基本知识简单汇总
Sep 19 Javascript
JavaScript的setter与getter方法
Nov 29 Javascript
4个顶级JavaScript高级文本编辑器
Oct 10 Javascript
通过npm或yarn自动生成vue组件的方法示例
Feb 12 Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 Javascript
js几个验证函数代码
Mar 25 #Javascript
Firefox下提示illegal character并出现乱码的原因
Mar 25 #Javascript
JavaScript setTimeout和setInterval的使用方法 说明
Mar 25 #Javascript
JavaScript 学习初步 入门教程
Mar 25 #Javascript
ext 列表页面关于多行查询的办法
Mar 25 #Javascript
JS学习之一个简易的日历控件
Mar 24 #Javascript
javascript instanceof,typeof的区别
Mar 24 #Javascript
You might like
php session_start()出错原因分析及解决方法
2013/10/28 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
JavaScript中数组的排序、乱序和搜索实现代码
2011/11/30 Javascript
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
利用BootStrap弹出二级对话框的简单实现方法
2016/09/21 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
学习vue.js表单控件绑定操作
2016/12/05 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
Python中Threading用法详解
2017/12/27 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
python和php学习哪个更有发展
2020/06/17 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
python 监控logcat关键字功能
2020/09/04 Python
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
会计实习生工作总结的自我评价
2013/10/07 职场文书
电气技术员岗位职责
2013/11/19 职场文书
早餐连锁店计划书
2014/01/08 职场文书
八一建军节营销活动方案
2014/08/31 职场文书