0:00:00.981,0:00:03.728 让我们回到我们的程序,[br]此程序利用函数功能 0:00:03.728,0:00:05.575 描画了四个Winston(大黄娃娃头)。 0:00:05.575,0:00:08.156 我已经改变了他 0:00:08.156,0:00:10.587 在每一年龄阶段实际年龄的显示。[br]你很快会明白为什么。 0:00:11.377,0:00:13.549 但首先我需要让你们知道关于[br]Winston 的某些事情。 0:00:13.549,0:00:15.901 Winston 特别喜欢炸甜面圈, 0:00:15.901,0:00:18.437 他一天吃三个。 0:00:18.437,0:00:21.333 那就是他的脸又大又黄的原因。 0:00:21.703,0:00:25.311 所以为了警告Winston有关[br]炸甜面圈对他有多么不好, 0:00:25.311,0:00:31.093 我想修改一下这个程序[br]显示他在每个年龄段吃了 0:00:31.093,0:00:32.675 多少个炸甜面圈。 0:00:32.675,0:00:35.783 比如,当他两岁的时候, 0:00:35.873,0:00:41.598 那意味着他吃了3x365x2, 0:00:41.598,0:00:45.873 所以是一天三个,乘以365天,[br]再乘以2年, 0:00:45.873,0:00:50.330 我们会在那个头下面显示那个结果。[br]哇,这么多! 0:00:50.330,0:00:53.945 两千个炸甜面圈,对一个两岁的[br]孩子来说真的很多。 0:00:53.945,0:01:02.452 现在他是十四岁,让我们看看,[br]应该是3乘以365 再乘以14, 0:01:04.032,0:01:08.446 那就是15,000个。好了。 0:01:08.446,0:01:12.620 我可以一直用这个算式,[br]但我开始注意到一个模式。 0:01:13.150,0:01:16.718 我在重复我的计算。 0:01:16.718,0:01:20.416 虽然我只是改变一个数字:[br]年数。 0:01:20.416,0:01:22.872 无论何时当我看到这样的重复编码, 0:01:22.872,0:01:28.348 我会想,“嗯,我能把这变成一项函数吗?“ 0:01:28.348,0:01:31.835 是的,绝对可以。[br]那么现在让我们来试试看。 0:01:32.795,0:01:34.416 我会在这儿定义我的函数 0:01:34.416,0:01:40.377 或者把它叫做calTotalDonuts=function 0:01:40.917,0:01:44.228 它需要一个参数,年龄的数目, 0:01:44.228,0:01:46.022 因为那是我们每次 0:01:46.022,0:01:48.566 做计算时唯一有变化的数字。 0:01:49.316,0:01:52.878 我们将在这里面做计算, 0:01:52.878,0:01:59.600 并将其存作一个变量,[br]所以是3乘以365 乘以numYears. 0:02:00.680,0:02:03.099 可以啦,现在我们就有了这个函数功能。 0:02:03.099,0:02:08.598 我会用calcTotalDonuts来替代这个表达式 0:02:08.598,0:02:11.568 使用函数功能,并且输入“2” 0:02:12.738,0:02:16.877 好了,我们并没有看见总数 0:02:17.227,0:02:19.092 那么,怎么回事儿? 0:02:19.092,0:02:22.616 哦,我们的函数功能在这儿计算了总数 0:02:23.096,0:02:25.640 但没有告诉任何人那个总数。 0:02:26.050,0:02:30.367 就像老师在课堂上叫你起来回答问题 0:02:30.367,0:02:31.744 你的答案在你的脑子里, 0:02:31.744,0:02:33.652 但你羞于把它说出来。 0:02:33.652,0:02:36.998 你已经完成了工作,但你的老师[br]却不知道, 0:02:37.348,0:02:39.679 如果我们想让函数把值告诉给 0:02:39.679,0:02:45.170 调用它的人,[br]那这个函数必须明确地回返一个值。 0:02:45.710,0:02:49.319 所以,为了函数能回返一个值,[br]我们必须写下“return” 0:02:49.599,0:02:51.568 然后就有了它所要的回值。 0:02:51.568,0:02:55.138 也许它是一个变量或者[br]是一个值或一个表达式, 0:02:55.138,0:02:57.749 那么在这儿我们就敲上[br]return totalDonuts,行吗? 0:02:57.749,0:03:01.540 这样调用这个函数就能得到回应了 0:03:01.880,0:03:04.421 现在我们的值显示在此,好棒! 0:03:04.771,0:03:06.651 事实上我们能够缩短我们的函数, 0:03:06.651,0:03:08.341 我们甚至不用把它存进变量, 0:03:08.341,0:03:10.051 我们仅仅把这儿的整个表达式 0:03:10.051,0:03:14.268 放进回车,然后它就仅有一行。很好。 0:03:15.068,0:03:17.166 好吧,现在我们可以履行 0:03:17.166,0:03:20.444 在一生的各个年龄段[br]计算炸甜面圈的总量 0:03:20.444,0:03:23.452 只需点击这个函数功能[br]并且输入年数。 0:03:24.212,0:03:28.704 让我们来看看,这是 calcTotalDonuts(25), 0:03:28.704,0:03:34.056 没有打错地方,it's calcTotalDonuts(65) 0:03:36.366,0:03:40.241 好了!很棒,如果他到了65岁, 0:03:40.241,0:03:44.406 它就吃了70,000个炸甜面圈。[br]这太多了。 0:03:45.136,0:03:48.051 我觉得Winston不会活那么长。(笑声) 0:03:48.051,0:03:50.331 但现在我们已经把它做成了函数功能, 0:03:50.331,0:03:52.891 要改变一下它的某些部分也很容易。 0:03:53.181,0:03:55.138 比如Winston明白这个并且说, 0:03:55.138,0:03:58.865 “哇,哇,这太多了。如果我每天[br]只吃一个怎么样?” 0:03:58.865,0:04:02.242 行, 我们可以从这儿开始,[br]改变这一个数字, 0:04:02.732,0:04:04.329 然后看看所有的变化。 0:04:04.329,0:04:07.971 这是23,000.还是很多。[br]那么Winston又说, 0:04:07.971,0:04:10.773 “好吧,好吧,如果我每周吃一个怎么样?” 0:04:10.773,0:04:12.477 好的,这样比较合理。 0:04:12.477,0:04:15.025 那么我们只需要把365 变为50, 0:04:15.025,0:04:17.153 因为好像是一年50个星期,是吗? 0:04:18.103,0:04:22.802 好,这就好多了,是吗?[br]3000个炸甜面圈,这看起来还比较合理。 0:04:22.802,0:04:26.751 所以,你看利用函数和回返值, 0:04:26.751,0:04:30.631 我们能够缩短编码而且挽救生命。