从阶乘函数对比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简单实现命名空间效果
Mar 06 Javascript
浅谈Javascript如何实现匀速运动
Dec 19 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
jquery制做精致的倒计时特效
Jun 13 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
js动态获取子复选项并设计全选及提交的实现方法
Jun 24 Javascript
js将滚动条滚动到指定位置的简单实现方法
Jun 25 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
Jan 17 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
Oct 12 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
Feb 28 jQuery
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 Javascript
帮你提高开发效率的JavaScript20个技巧
Jun 18 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 结果集的分页实现代码
2009/03/10 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
简单谈谈favicon
2015/06/10 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
php之可变函数的实例详解
2017/09/13 PHP
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
jquery 操作DOM案例代码分享
2012/04/05 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
Python3基础之函数用法
2014/08/13 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
如何通过python画loss曲线的方法
2019/06/26 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
css3实现3D文本悬停改变效果的示例代码
2019/01/16 HTML / CSS
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
岗位职责定义及内容
2013/11/08 职场文书
医生见习报告范文
2014/11/03 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
护士个人总结范文
2015/02/13 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
学雷锋广播稿大全
2015/08/19 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript