从阶乘函数对比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 相关文章推荐
js验证表单第二部分
Nov 25 Javascript
Javascript Throttle &amp; Debounce应用介绍
Mar 19 Javascript
Javascript核心读书有感之语言核心
Feb 01 Javascript
基于jQuery仿淘宝产品图片放大镜代码分享
Jun 23 Javascript
JS 动态判断PC和手机浏览器实现代码
Sep 21 Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 Javascript
微信小程序数据存储与取值详解
Jan 30 Javascript
JS简单添加元素新节点的方法示例
Feb 10 Javascript
Vue实现搜索 和新闻列表功能简单范例
Mar 16 Javascript
r.js来合并压缩css文件的示例
Apr 26 Javascript
vue(2.x,3.0)配置跨域代理
Nov 27 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
Apr 24 Javascript
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的异常处理类Exception的使用及说明
2012/06/13 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
简单实用的PHP防注入类实例
2014/12/05 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
鼠标图片振动代码
2006/07/06 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
jquery+css实现动感的图片切换效果
2015/11/25 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
Javascript实现时间倒计时效果
2017/07/15 Javascript
利用node.js实现反向代理的方法详解
2017/07/24 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
python处理json数据中的中文
2014/03/06 Python
浅谈Python基础—判断和循环
2019/03/22 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
亚马逊印度站:Amazon.in
2017/10/15 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
非常详细的C#面试题集
2016/07/13 面试题
文秘专业大学生求职信
2013/11/10 职场文书
酒店中秋节促销方案
2014/01/30 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
继承公证书样本
2014/04/04 职场文书
学习雷锋活动总结
2014/04/29 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
小学端午节活动总结
2015/02/11 职场文书
2015国庆66周年宣传语
2015/07/14 职场文书
检举信的写法
2019/04/10 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电