手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >从阶乘函数对比Javascript和C#的异同
从阶乘函数对比Javascript和C#的异同
摘要:JavaScript代码块复制代码代码如下:functionfactorial(num){if(num

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实现行拖动的方法

关于JavaScript作用域你想知道的一切

javascript正则表达式总结

IE中jscript/javascript的条件编译

介绍JavaScript中Math.abs()方法的使用

JavaScript实现带标题的图片轮播特效

javascript常用的方法分享

简单介绍JavaScript的变量和数据类型

javascript实现删除前弹出确认框

简单谈谈javascript中this的隐式绑定

精品推荐
分类导航