从阶乘函数对比Javascript和C#的异同
2012-05-31 00:00
621 查看
JavaScript代码块
C#代码块
从上面,可以看出:
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高级程序设计》
部分文字来自以上书籍
<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#函数
- Unity3D中JavaScript与C#对比
- unity3d中两种语言的对比JavaScript vs C#第一节
- Unity3d中两种语言的对比JavaScript vs C#第二节
- Unity3D中JavaScript与C#对比
- unity3d中两种语言的对比JavaScript vs C# 第三节
- unity3d中两种语言的对比JavaScript vs C# 第四节
- Unity3D中JavaScript与C#对比
- Unity3D中JavaScript与C#对比
- Unity3D中JavaScript与C#对比
- unity3d中两种语言的对比JavaScript vs C# 第五节
- C#中值类型与引用类型异同对比
- javaScript和C#语法对比
- Unity3D中JavaScript与C#对比
- C#强化系列文章三:实验分析C#中三种计时器使用异同点
- Atitit.线程 死锁 跑飞 的检测与自动解除 与手动解除死锁 java c# .net php javascript.
- C#语言学习:变量的声明与初始化的范围(对比C++)
- 我对C++的前景看法 C++和C#的对比(转载)
- JavaScript中几个相似方法对比