从阶乘函数对比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 相关文章推荐
关于document.cookie的使用javascript
Oct 29 Javascript
jquery弹出关闭遮罩层实例
Aug 06 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 Javascript
JavaScript代码性能优化总结(推荐)
May 16 Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 Javascript
AngularJS 异步解决实现方法
Jun 12 Javascript
webpack4的迁移的使用方法
May 25 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
详解微信小程序获取当前时间及日期的方法
Apr 28 Javascript
vue路由跳转传参数的方法
May 06 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
Jan 13 Vue.js
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语法(4)
2006/10/09 PHP
PHP查询MySQL大量数据的时候内存占用分析
2011/07/22 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
解析zend Framework如何自动加载类
2013/06/28 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
Yii框架实现多数据库配置和操作的方法
2017/05/25 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
用javascript实现页面打印的三种方法
2007/03/05 Javascript
Javascript 获取LI里的内容
2008/12/17 Javascript
JQuery-tableDnD 拖拽的基本使用介绍
2013/07/04 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
JS学习笔记之数组去重实现方法小结
2019/05/29 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
Python之多线程爬虫抓取网页图片的示例代码
2018/01/10 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
基于HTML5代码实现折叠菜单附源码下载
2015/11/27 HTML / CSS
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
JVM是一个编译程序还是解释程序
2012/09/11 面试题
千元咖啡店的创业计划书范文
2013/12/29 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
产品包装策划方案
2014/05/18 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
python munch库的使用解析
2021/05/25 Python