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中国象 ...
随机推荐
- STM32上使用JSON
一.STM32工程中添加JSON 最近在一网2串项目,串口和网口之间可能需要定义一下简单的通信协议,而通信协议上则需要去定义一下通信的数据格式,上次听剑锋说要用Json来定义,目前查了下资料具体如何去 ...
- 洛谷——P1843 奶牛晒衣服
https://www.luogu.org/problem/show?pid=1843#sub 题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 . 于是 , 为牛宝宝洗晒衣 服就成了很不爽的事情. ...
- ReactJs 入门DEMO(转自别人)
附件是分享的一些他人的ReactJs入门DEMO,以前版本使用的是JSXTransformer.js,新版的用browser.min.js替代了. DEMO 下载地址:http://files.cnb ...
- 创建VG
创建VG smit mkvg Add a Volume Group Add a Scalable Volume Group VOLUME GROUP name ...
- JavaScript--模块化 JavaScript module designer
module: 模块就是实现特定功能的一组方法.1.在首页的一个接口js;首先下载好require.js文件引入首页. <script src="require.js" da ...
- 关于Webpack详述系列文章 (第一篇)
WebPack官网地址(https://webpack-china.org/) 1. 什么是WebPack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript ...
- Docker 搭建java+tomcat
1. 准备java和tomcat的软件包 jdk-7u79-linux-x64.tar.gz apache-tomcat-7.0.57.tar.gz 2. 编辑Dockerfile 文件 vim Do ...
- 【例题 8-7 UVA - 11572】Unique Snowflakes
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 类似尺取法. 用set判断这段区间有没有重复的数字. 有的话,就把头节点的那个数字删掉,直到没有为止. [代码] /* 1.Shou ...
- Windows上安装多个MySQL实例(转)
在学习和开发过程中有时候会用到多个MySQL数据库,比如Master-Slave集群.分库分表,开发阶段在一台机器上安装多个MySQL实例就显得方便不少. 在 MySQL教程-基础篇-1.1-Wind ...
- @property 和@synthesize
xcode4.4之后,@property包括了@synthesize的功能. 这是编译器的升级. @property有几个作用:1)默认生成一个私有成员变量,并有一个带下划线的别名如_age 2) ...