从阶乘函数对比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 相关文章推荐
利用XMLHTTP传递参数在另一页面执行并刷新本页
Oct 26 Javascript
JS 有名函数表达式全面解析
Mar 19 Javascript
jquery 图片截取工具jquery.imagecropper.js
Apr 09 Javascript
JS求平均值的小例子
Nov 29 Javascript
Javascript:为input设置readOnly属性(示例讲解)
Dec 25 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
May 25 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
Mar 25 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
Apr 13 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
Mar 07 Javascript
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
js如何获取访问IP、地区、当前操作浏览器
Jul 23 Javascript
Vue+TypeScript中处理computed方式
Apr 02 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
PHP的HTTP客户端Guzzle简单使用方法分析
2019/10/30 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
2011/01/19 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
vue mounted 调用两次的完美解决办法
2018/10/29 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
pyqt4教程之messagebox使用示例分享
2014/03/07 Python
对python的文件内注释 help注释方法
2018/05/23 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
python 公共方法汇总解析
2019/09/16 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
设计师珠宝:Ylang 23
2018/05/11 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
教育课题研究自我鉴定范文
2013/12/28 职场文书
千元咖啡店的创业计划书范文
2013/12/29 职场文书
业务总经理岗位职责
2014/02/03 职场文书
对标管理实施方案
2014/03/12 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
个人整改措施书面材料
2014/10/24 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android