从阶乘函数对比Javascript和C#的异同


Posted in Javascript onMay 31, 2012

JavaScript代码块

<script type="text/javascript"> 
function factorial(num) { 
if (num <= 1) { 
return 1; 
} else { 
return num * arguments.callee(num - 1); 
} 
} 
var trueFactorial = factorial; 
factorial = function () { 
return 0; 
} 
alert(trueFactorial(5)); //120 
alert(factorial(5)); //0 
</script>

C#代码块
protected void Page_Load(object sender, EventArgs e) 
{ 
TestFactorial(); 
} 
public delegate int factorialDelegate(int num); //定义递归函数委托 
private void TestFactorial() 
{ 
factorialDelegate fdelegate = factorial; //请注意与javascript函数对比 
factorialDelegate trueFactorial = fdelegate; 
fdelegate = returnZero; 
int num1 = trueFactorial(5); //120 
int num2 = fdelegate(5); //0 
} 
private int returnZero(int num) 
{ 
return 0; 
} 
private int factorial(int num) 
{ 
if (num <= 1) 
{ 
return 1; 
} 
else 
{ 
return num * factorial(num - 1); 
} 
}

从上面,可以看出:
1、javascript中的函数都不需要设定函数是否有返回值,既然如此那么函数的返回值类型当然也就没有必要设置了。
2、在javascript中的函数竟然是一个对象,这个我们接触的强类型的语言(C、C++、C#)有很大的不同。
3、javascript中有一个类数组对象arguments ,包含着传入函数中的所有参数。而且这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。看一下,C#代码块,委托trueFactorial的执行和函数factorial紧紧地耦合在一起。我们没有办法消除这种紧密耦合的现象。而在上面javascript代码块中,当变量trueFactorial获得了factorial的值。然后,我们又简单地将一个返回0的函数赋值给了factorial变量。如果像原来那样不使用arguments.callee,调用trueFactorial()就会返回0。在解除了函数体内的代码与函数名的耦合状态之后,trueFactorial()仍然能够正常计算阶乘。至于factorial(),他现在只是一个返回0的函数。

参考书籍《Javascript高级程序设计》
部分文字来自以上书籍

Javascript 相关文章推荐
JavaScript面象对象设计
Apr 28 Javascript
jQuery的实现原理的模拟代码 -1 核心部分
Aug 01 Javascript
jQuery实现的一个自定义Placeholder属性插件
Aug 11 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
Oct 13 Javascript
深入探讨前端框架react
Dec 09 Javascript
浅析Angular2子模块以及异步加载
Apr 24 Javascript
JS自动生成动态HTML验证码页面
Jun 14 Javascript
jQuery实现的滑块滑动导航效果示例
Jun 04 jQuery
微信小程序在地图选择地址并返回经纬度简单示例
Dec 03 Javascript
微信小程序实现左侧滑栏过程解析
Aug 26 Javascript
uploadify插件实现多个图片上传并预览
Sep 30 Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 jQuery
javascript 快速排序函数代码
May 30 #Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
May 30 #Javascript
Chosen 基于jquery的选择框插件使用方法
May 30 #Javascript
基于jquery的鼠标拖动效果代码
May 30 #Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
May 30 #Javascript
基于jQuery的倒计时实现代码
May 30 #Javascript
基于jquery的放大镜效果
May 30 #Javascript
You might like
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
jquery json 实例代码
2010/12/02 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JavaScript中document.forms[0]与getElementByName区别
2015/01/21 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python socket聊天脚本代码实例
2020/01/02 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
Python过滤掉numpy.array中非nan数据实例
2020/06/08 Python
CSS3实现多重边框的方法总结
2016/05/31 HTML / CSS
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
团日活动策划书
2014/02/01 职场文书
运动会广播稿20字
2014/02/18 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
《雪儿》教学反思
2014/04/17 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
教书育人演讲稿
2014/09/11 职场文书
餐厅感恩节活动策划方案
2014/10/11 职场文书
实习单位意见
2015/06/04 职场文书
总经理年会致辞
2015/07/29 职场文书
自荐信大全
2019/03/21 职场文书