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 相关文章推荐
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
Apr 06 Javascript
网页前端优化之滚动延时加载图片示例
Jul 13 Javascript
js innerHTML 改变div内容的方法
Aug 03 Javascript
JQuery判断子iframe何时加载完成解决方案
Aug 20 Javascript
js读取注册表的键值示例
Sep 25 Javascript
javascript垃圾收集机制与内存泄漏详细解析
Nov 11 Javascript
JavaScript声明变量名的语法规则
Jul 10 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
Jun 13 Javascript
vue.js表格分页示例
Oct 18 Javascript
AngularJs入门教程之环境搭建+创建应用示例
Nov 01 Javascript
vue中template的三种写法示例
Oct 21 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连接数据库代码应用分析
2011/05/29 PHP
PHP将XML转数组过程详解
2013/11/13 PHP
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
关于PHP文件的自动运行方法分析
2016/05/13 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
JQuery中each()的使用方法说明
2010/08/19 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
JavaScript实现动态添加Form表单元素的方法示例
2017/08/14 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
[02:46]2014DOTA2国际邀请赛 选手为你解读比赛MVP充满梦想
2014/07/09 DOTA
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
pandas分区间,算频率的实例
2019/07/04 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
Java和Javasciprt的区别
2012/09/02 面试题
怎样填写就业意向
2014/04/02 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
Java基于字符界面的简易收银台
2021/06/26 Java/Android
js 数组 fill() 填充方法
2021/11/02 Javascript