我是靠谱客的博主 苹果棒棒糖,最近开发中收集的这篇文章主要介绍从阶乘函数对比Javascript和C#的异同,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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和C#的异同的全部内容,希望文章能够帮你解决从阶乘函数对比Javascript和C#的异同所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(106)

评论列表共有 0 条评论

立即
投稿
返回
顶部