JavaScript的return程序流

原文

  简书原文:https://www.jianshu.com/p/cd65a26a5b0c

大纲

  1、场景分析
  2、代码分析
  3、总结分析

1、场景分析

  以下有两段代码,这两段代码都可以使用检查输入的字符的大小写的功能,我们可以通过对这两段代码的分析来认识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、代码分析

  第二段代码能够实现和第一段代码同样的功能,但是我们通常推荐使用第一种形式的代码。为什么我们不采用这种方式呢?这种方式的缺点就是在一个函数中使用了多个return语句,这使得函数的执行流难于跟踪。对于一个较小的函数来说,这可能并不是什么大问题,但对于一个较复杂的函数来说,就可能变成一个棘手的问题。采用第一种方式的代码,在函数结束前只有一个唯一的return语句,我们可以非常准确的知道函数将在这个return语句后结束。而对于第二个版本的函数,它具有4个return语句,因此函数可能在任何一个可达的return语句之后结束。这样,函数将具有4个可能的出口和返回位置。这使得对函数中执行流的判断更加麻烦。

3、总结分析

  1、一个return代表着一个出口和返回位置。
  2、函数最好的形式是一个入口一个出口,从入口进入,执行流执行完所有东西之后从出口中出去。如果一个函数中含有多个return那么在执行流结束之前,函数的执行流都无法知道函数将在哪个return语句结束,使得执行流难以跟踪。
  3、因此,return的语句越少越好,虽然同样都可以解决问题,但是改造之后的函数相对于原函数不确定性,性能等都可能有极大的问题。

原文地址:https://www.cnblogs.com/shcrk/p/9261194.html