zoukankan      html  css  js  c++  java
  • 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的语句越少越好,虽然同样都可以解决问题,但是改造之后的函数相对于原函数不确定性,性能等都可能有极大的问题。

  • 相关阅读:
    [译]JavaScript源码转换:非破坏式与再生式
    [译]ES6中的代理对象
    tensorflow 如何获取graph中的所有tensor name
    python3中的str和bytes
    git submodule 添加 更新 删除 教程
    《重构:改善既有代码的设计》摘抄
    thrift入门教程/thrift资料集合
    将python2代码升级为python3代码最佳实践
    python标准库:subprocess——子进程管理
    安装“python-snappy”遇到“error: command 'x86_64-linux-gnu-gcc' failed with exit status 1”
  • 原文地址:https://www.cnblogs.com/shcrk/p/9261194.html
Copyright © 2011-2022 走看看