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的return程序流的更多相关文章
- JavaScript中国象棋程序(6) - 克服水平线效应、检查重复局面
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第6节. 这一系列共有9个部分: 0.JavaScript中国象 ...
- JavaScript中国象棋程序(1) - 界面设计
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第1节. 这一系列共有9个部分: 0.JavaScript中国象 ...
- JavaScript中国象棋程序(2) - 校验棋子走法
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第2节. 这一系列共有9个部分: 0.JavaScript中国象 ...
- JavaScript中国象棋程序(3) - 电脑自动走棋
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第3节. 这一系列共有9个部分: 0.JavaScript中国象 ...
- JavaScript中国象棋程序(4) - 极大极小搜索算法
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第4节. 这一系列共有9个部分: 0.JavaScript中国象 ...
- JavaScript中国象棋程序(5) - Alpha-Beta搜索
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第5节. 这一系列共有9个部分: 0.JavaScript中国象 ...
- asp.net core系列 58 IS4 基于浏览器的JavaScript客户端应用程序
一. 概述 本篇探讨使用"基于浏览器的JavaScript客户端应用程序".与上篇实现功能一样,只不过这篇使用JavaScript作为客户端程序,而非core mvc的后台代码Ht ...
- JavaScript中国象棋程序(0) - 前言
“JavaScript中国象棋程序” 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.希望通过这个系列,我们对博弈程序的算法有一定的了解.同时,我们也将构建出一个不错的中国象棋程序 ...
- JavaScript中国象棋程序(7) - 置换表
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.这是教程的第2节. 这一系列共有9个部分: 0.JavaScript中国象 ...
随机推荐
- JNDI学习总结(2)——JNDI数据源的配置
一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Con ...
- LINUX下为apache 和 PHP 添加模块
LINUX下为apache 和 PHP 添加模块https://www.path8.net/tn/archives/4717/opt/lampp/bin/httpd -V/opt/lampp/bin/ ...
- actionBar-进入界面闪烁问题解决
问题分析: 主要是因为在开启一个应用的时候,当前界面并不是第一界面,在它之前,还有一个界面启动了,这个界面的唯一目的就是启动主界面,它目的不是显示.虽然如此,但是呢,这个界面的theme因为没有做统一 ...
- [NowCoder]牛客OI周赛1 题解
A.分组 首先,认识的人不超过3个,因此不存在无解的方案 考虑直接构造,先把所有点设为1,顺序扫一遍把有问题的点加入队列 每次取队头,将其颜色取反,再更新有问题的点 复杂度:考虑到每个点不会操作2次, ...
- JS 图片大小自动调整 (img)
<script> function dlutChangeImg(){ var maxwidth = 598; var obj = document.getElementById('bbs_ ...
- golang sync.Mutex(2)
package main import ( "fmt" "sync" "time" ) type User struct { Name st ...
- material风格前端CSS框架——Materialize
官方网站:http://materializecss.com/(有中文,翻译不全) 中文学习站:http://www.materializecss.cn/(翻译较全)
- CORS原理
http://blog.csdn.net/renfufei/article/details/51675148 https://html.spec.whatwg.org/multipage/infras ...
- C#string转换为Datetime
DateTime.ParseExact("0710090000", "MMddHHmmss", CultureInfo.CurrentCulture, Date ...
- 40.【IntelliJ IDEA】使用idea解决新建jsp文件而找不到jsp文件模版的新建选项
转自:https://www.cnblogs.com/sxdcgaq8080/p/7676294.html 使用idea解决新建jsp文件而找不到jsp文件模版的新建选项,这样每次创建一个新的jsp文 ...