从阶乘函数对比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 相关文章推荐
THREE.JS入门教程(3)着色器-下
Jan 24 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
Dec 13 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
手把手搭建安装基于windows的Vue.js运行环境
Jun 12 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
Sep 01 jQuery
jQuery删除/清空指定元素的所有子节点实例代码
Jul 04 jQuery
JS为什么说async/await是generator的语法糖详解
Jul 11 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
Aug 26 Javascript
Vue.js组件通信之自定义事件详解
Oct 19 Javascript
JavaScript命令模式原理与用法实例详解
Mar 10 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
Jun 28 Javascript
原生JS封装vue Tab切换效果
Apr 28 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
apache+php完美解决301重定向的两种方法
2011/06/08 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
一段多浏览器的&quot;复制到剪贴板&quot;javascript代码
2007/03/27 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
浅谈angularjs $http提交数据探索
2017/01/20 Javascript
JS中使用 after 伪类清除浮动实例
2017/03/01 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
vue-cli构建项目下使用微信分享功能
2018/05/28 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
VueJS 取得 URL 参数值的方法
2019/07/19 Javascript
Python调用命令行进度条的方法
2015/05/05 Python
Python爬取三国演义的实现方法
2016/09/12 Python
Python实现识别手写数字大纲
2018/01/29 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
python实现三壶谜题的示例详解
2020/11/02 Python
html5基础标签(html5视频标签 html5新标签用法)
2013/12/30 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
Ruby如何定义一个类
2012/10/08 面试题
个人自我鉴定写法
2013/11/30 职场文书
电子信息科学专业自荐信
2014/01/30 职场文书
cf收人广告词
2014/03/14 职场文书
领导干部作风建设总结
2014/10/23 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
2015年安全月活动总结
2015/03/26 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
Python内置的数据类型及使用方法
2022/04/13 Python