当前位置:嗨网首页>书籍在线阅读

03-函数作为有返回值的子程序

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

13.2 函数作为有返回值的子程序

在之前的例子中, printLeapYearStatus 是一个普通意义上的子程序:它只包含了一些便于重用的功能,仅此而已。这种简单的函数用法,平时用的其实不多,当编程问题变得更复杂或更抽象时,用的就更少了。接下来进行一些抽象思考,考虑函数作为有返回值的子程序时的情况。

printLeapYearStatus 固然很不错,但是当进一步构建程序时,很快就不满足于将信息输出到控制台上了。比如,想用HTML或文件作为输出,或者将当前的闰年状态信息用在其他计算中,此时,子程序就爱莫能助了。可是,当需要知道当前年份是否为闰年的时候,我们也不想去重新实现算法。

庆幸的是,重写(和重命名)函数,使之变成一个有返回值的子程序很容易。

function isCurrentYearLeapYear() {
   const year = new Date().getFullYear();
   if(year % 4 !== 0) return false;
   else if(year % 100 != 0) return true;
   else if(year % 400 != 0) return false;
   else return true;
} 

再来看一些例子,它们演示了如何使用新函数的返回值:

const daysInMonth =
   [31, isCurrentYearLeapYear() ? 29 : 28, 31, 30, 31, 30,
      31, 31, 30, 31, 30, 31];
if(isCurrentYearLeapYear()) console.log('It is a leap year.');

在继续之前,想想之前给函数起的名字。给一个返回boolean值(或者为在一个具有boolean值的上下文中使用而设计)的函数命名时,将is作为前缀是很常见的做法。该函数名还包含了单词current,这又是为什么呢?因为这个函数的意图很明显,就是获取当前日期。也就是说,在2016.12.31和2017.1.1这两天分别运行函数时,它会有不同的返回值。