欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

從階乘函數(shù)對(duì)比Javascript和C#的異同

 更新時(shí)間:2012年05月31日 01:06:36   作者:  
今天學(xué)習(xí)Javascript函數(shù),發(fā)現(xiàn)這完全是一個(gè)神奇的東西。跟我們平常所見強(qiáng)類型語(yǔ)言中的函數(shù)有好多不同。下面我們就從C#和JavaScript的兩個(gè)計(jì)算階乘的函數(shù)中比較兩者的異同
JavaScript代碼塊
復(fù)制代碼 代碼如下:

                  
<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#代碼塊
復(fù)制代碼 代碼如下:

protected void Page_Load(object sender, EventArgs e)
{
TestFactorial();
}
public delegate int factorialDelegate(int num); //定義遞歸函數(shù)委托
private void TestFactorial()
{
factorialDelegate fdelegate = factorial; //請(qǐng)注意與javascript函數(shù)對(duì)比
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中的函數(shù)都不需要設(shè)定函數(shù)是否有返回值,既然如此那么函數(shù)的返回值類型當(dāng)然也就沒有必要設(shè)置了。
2、在javascript中的函數(shù)竟然是一個(gè)對(duì)象,這個(gè)我們接觸的強(qiáng)類型的語(yǔ)言(C、C++、C#)有很大的不同。
3、javascript中有一個(gè)類數(shù)組對(duì)象arguments ,包含著傳入函數(shù)中的所有參數(shù)。而且這個(gè)對(duì)象還有一個(gè)名叫callee的屬性,該屬性是一個(gè)指針,指向擁有這個(gè)arguments對(duì)象的函數(shù)。看一下,C#代碼塊,委托trueFactorial的執(zhí)行和函數(shù)factorial緊緊地耦合在一起。我們沒有辦法消除這種緊密耦合的現(xiàn)象。而在上面javascript代碼塊中,當(dāng)變量trueFactorial獲得了factorial的值。然后,我們又簡(jiǎn)單地將一個(gè)返回0的函數(shù)賦值給了factorial變量。如果像原來那樣不使用arguments.callee,調(diào)用trueFactorial()就會(huì)返回0。在解除了函數(shù)體內(nèi)的代碼與函數(shù)名的耦合狀態(tài)之后,trueFactorial()仍然能夠正常計(jì)算階乘。至于factorial(),他現(xiàn)在只是一個(gè)返回0的函數(shù)。

參考書籍《Javascript高級(jí)程序設(shè)計(jì)
部分文字來自以上書籍

相關(guān)文章

最新評(píng)論