从阶乘函数对比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 学习笔记 错误处理
Jul 30 Javascript
使用javascipt---实现二分查找法
Apr 10 Javascript
网页前端优化之滚动延时加载图片示例
Jul 13 Javascript
node.js中watch机制详解
Nov 17 Javascript
js实现获取鼠标当前的位置
Dec 14 Javascript
AngularJS前端页面操作之用户修改密码功能示例
Mar 27 Javascript
正则表达式基本语法及表单验证操作详解【基于JS】
Apr 07 Javascript
详解用JS添加和删除class类名
Mar 25 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
vue实现抖音时间转盘
Sep 08 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 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 4.2书写安全的脚本
2006/10/09 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
PHP之变量、常量学习笔记
2008/03/27 PHP
基于PHP的cURL快速入门教程 (小偷采集程序)
2011/06/02 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
2007/03/08 Javascript
不同浏览器的怪癖小结
2010/07/11 Javascript
动态加载js的方法汇总
2015/02/13 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
JavaScript实现购物车基本功能
2017/07/21 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
深入了解JavaScript 私有化
2019/05/30 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
Node.js API详解之 net模块实例分析
2020/05/18 Javascript
Taro小程序自定义顶部导航栏功能的实现
2020/12/17 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
2018/01/18 Python
python修改list中所有元素类型的三种方法
2018/04/09 Python
Python3转换html到pdf的不同解决方案
2019/03/11 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
电大毕业生自我鉴定
2013/11/10 职场文书
学习党课思想汇报
2013/12/29 职场文书
大学新生军训方案
2014/05/03 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
消防安全培训工作总结
2015/10/23 职场文书