原文
大綱
1、場景分析
2、代碼分析
3、總結(jié)分析
1、場景分析
以下有兩段代碼,這兩段代碼都可以使用檢查輸入的字符的大小寫的功能,我們可以通過對這兩段代碼的分析來認(rèn)識return程序流。
代碼一
<html>
<head>
<script>
function checkCarType(charToCheck){
var returnValue = "O";
var charCode = charToCheck.charCodeAt(0);
if (charCode >= "A".charCodeAt(0) && charCode <= "Z".charCodeAt(0)){
returnValue = "U";
}
else if (charCode >= "a".charCodeAt(0) && charCode <= "z".charCodeAt(0)){
returnValue = "L";
}
else if (charCode >= "0".charCodeAt(0) && charCode <= "9".charCodeAt(0)){
returnValue = "N";
}
return returnValue;
}
</script>
</head>
<body>
<script>
var myString = prompt("Enter some text " ,"Hello World");
switch (checkCarType(myString)){
case "U":
document.write("First character was upper case");
break;
case "L":
document.write("First character was lower case");
break;
case "N":
document.write("First character was a number");
break;
default:
document.write("First character was not a character or a number");
}
</script>
</body>
</html>
代碼二
function checkCarType(charToCheck){
var returnValue = "O";
var charCode = charToCheck.charCodeAt(0);
if (charCode >= "A".charCodeAt(0) && charCode <= "Z".charCodeAt(0)){
//returnValue = "U";
return "U";
}
else if (charCode >= "a".charCodeAt(0) && charCode <= "z".charCodeAt(0)){
//returnValue = "L";
return "L";
}
else if (charCode >= "0".charCodeAt(0) && charCode <= "9".charCodeAt(0)){
//returnValue = "N";
return "N";
}
//return returnValue;
return "O";
}
2、代碼分析
第二段代碼能夠?qū)崿F(xiàn)和第一段代碼同樣的功能,但是我們通常推薦使用第一種形式的代碼。為什么我們不采用這種方式呢?這種方式的缺點就是在一個函數(shù)中使用了多個return語句,這使得函數(shù)的執(zhí)行流難于跟蹤。對于一個較小的函數(shù)來說,這可能并不是什么大問題,但對于一個較復(fù)雜的函數(shù)來說,就可能變成一個棘手的問題。采用第一種方式的代碼,在函數(shù)結(jié)束前只有一個唯一的return語句,我們可以非常準(zhǔn)確的知道函數(shù)將在這個return語句后結(jié)束。而對于第二個版本的函數(shù),它具有4個return語句,因此函數(shù)可能在任何一個可達(dá)的return語句之后結(jié)束。這樣,函數(shù)將具有4個可能的出口和返回位置。這使得對函數(shù)中執(zhí)行流的判斷更加麻煩。
3、總結(jié)分析
1、一個return代表著一個出口和返回位置。
2、函數(shù)最好的形式是一個入口一個出口,從入口進入,執(zhí)行流執(zhí)行完所有東西之后從出口中出去。如果一個函數(shù)中含有多個return那么在執(zhí)行流結(jié)束之前,函數(shù)的執(zhí)行流都無法知道函數(shù)將在哪個return語句結(jié)束,使得執(zhí)行流難以跟蹤。
3、因此,return的語句越少越好,雖然同樣都可以解決問題,但是改造之后的函數(shù)相對于原函數(shù)不確定性,性能等都可能有極大的問題。