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 弹出框 替代浏览器的弹出框
Oct 29 Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
JavaScript作用域链使用介绍
Aug 29 Javascript
js实现简单的碰壁反弹效果
Aug 30 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
jquery拼接ajax 的json和字符串拼接的方法
Mar 11 Javascript
详解JS数组Reduce()方法详解及高级技巧
Aug 18 Javascript
浅谈Angular路由守卫
Aug 26 Javascript
基于 Vue 实现一个酷炫的 menu插件
Nov 14 Javascript
JavaScript indexOf()原理及使用方法详解
Jul 09 Javascript
javascript实现简易计算器功能
Sep 23 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页面间传递参数实例代码
2008/06/05 PHP
用PHP读取RSS feed的代码
2008/08/01 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
2016/12/15 Javascript
js实现分页功能
2017/05/24 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
AngularJs点击状态值改变背景色的实例
2017/12/18 Javascript
python 调用win32pai 操作cmd的方法
2017/05/28 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
Python with语句和过程抽取思想
2019/12/23 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
波兰在线体育用品商店:Hop-Sport.pl
2019/07/23 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
什么是TCP/IP
2014/07/27 面试题
品德评语大全
2014/05/05 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
python爬虫--selenium模块
2021/03/31 Python
详解JS ES6编码规范
2021/05/07 Javascript