从阶乘函数对比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 页面划词搜索JS
Sep 28 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
Jul 13 Javascript
JQuery在页面中添加和除移DOM示例代码
Jun 24 Javascript
javascript基本包装类型介绍
Apr 10 Javascript
JSON相关知识汇总
Jul 03 Javascript
jQuery实现ctrl+enter(回车)提交表单
Oct 19 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
Jul 24 Javascript
node.js+jQuery实现用户登录注册AJAX交互
Apr 28 jQuery
基于js中的存储键值对以及注意事项介绍
Mar 30 Javascript
微信小程序实现拍照画布指定区域生成图片
Jul 18 Javascript
layui表格 列自动适应大小失效的解决方法
Sep 06 Javascript
Vue的props父传子的示例代码
May 20 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
FCKeditor的安装(PHP)
2007/01/13 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
php面向对象编程self和static的区别
2016/05/08 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
php命令行写shell实例详解
2018/07/19 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
javascript XML数据显示为HTML一例
2008/12/23 Javascript
JavaScript Sort 表格排序
2009/10/31 Javascript
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
javascript 函数调用的对象和方法
2010/07/01 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
vue debug 二种方法
2018/09/16 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
详解python之配置日志的几种方式
2017/05/22 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
python序列化与数据持久化实例详解
2019/12/20 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
2020/06/01 Python
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
医院竞聘演讲稿
2014/05/16 职场文书
企业安全生产标语
2014/06/06 职场文书
场地使用证明模板
2014/10/25 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
入党团支部推荐意见
2015/06/02 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
Promise静态四兄弟实现示例详解
2022/07/07 Javascript