既然你已经学会了基本的函数, 那么我现在就要加一点点难度了: 局部变量与全局变量的差别。 你现在可能还不明白这两个名词的意思, 所以我们先举个例子吧。 我写的这个程序能告诉你 我在童年里长了多高。 因为每个人的长高速度各不相同, 我就写了这么个函数,名叫calcInches(身高计算)。 我在里面输入 startAge(起始年龄) 和 endAge(终止年龄) 以及 inchesPerYear(年增高值), 然后它就能计算这几年里一共长了多高, 然后把结果返回给调用此函数者。 这里从0岁到8岁, 我调用calinches(计算身高)这个函数, 输入数字 0、8和 2.5, 因为这8年里我平均每年长高2.5英寸。 然后它就运行计算,输出结果 20。 从8岁到16岁这里, 我输入数字8、 16和 2。 因为我没怎么长高,所以输出的结果是16。 这很简单。但现在我想要让它显示 我整个童年里一共长高了多少。 那么我怎么可以做到这步呢? 我可能会先看看自己的代码, 然后想着我这里都用到了哪些值呢。 这里有没有什么看起来像是总身高值的? 在这个 calcInches (身高计算)函数里 确实有个叫 totalInches(总增高值) 的变量, 所以我就把它输出,看看它代表了什么。 在底部输入 text(totalInches, 10, 200) 好了,看看能得到什么结果。 哦,出现报错了! 它说报错原因是 totalInches(总增高值) 未定义。 好吧,奇了怪了, 因为在这里 我们已经定义了totalInches 不是吗? var totalInches = 好吧,问题是因为我们在 一个函数内部声明了totalInches(总增高值), 就是这行这里。 当我们在一个函数内部声明一个变量时, 此变量就会成为局部变量。 它就只在 calcInches(计算身高) 这个函数里才有效。 而在该函数外的所有这些代码 都会无视函数内的局部变量, 它只会看返回值是什么。 它只看返回值 ,不会看变量。 所以当我们在函数外使用 totalInches(总增高值) 时, 程序就不认得它了。 它会说,“ 嘿!我没见过这变量诶! 它是未定义的! 我没法将它算出来!” 所以我们得另寻他路 来让外面的代码认得这变量。 如果我们将它从局部变量转成全局变量, 我们只要把定义从函数里移出就行了, 移到这个所谓的全局作用域里。 现在我们要做的就是在函数里改变赋值, 而无需进行定义或声明。 现在你能看到它显示 Total grown over life: 16(总增高值16)。 所以这就能找到变量了, 因为我们把它转成了全局变量。 但这还不是我们想要的值。 这只是最近一次的增高值而已。 这是因为每次我们调用这个函数时, totalInches(总增高值) 都只代表当次的总增高值,是吧。 所以我们真正需要的是设置一个新的变量, 用它来把每次算出的值累加起来, 算出整个年龄段的增高值。 所以我们把这行转成局部变量, 我们还要设一个新的全局变量, 名叫 lifeInches(一生总增高值)。 我们让它从0开始, 回到函数里,我们把这个全局变量写成 lifeInches += totalInches. 这样就能把每次调用函数算出的值全部加起来了, 而总和就会等于 lifeInches (一生总增高值)这个变量。 然后到底部 我们敲上 text(lifeInches, 10, 200), 啦啦!一生总增高值出来了! 不过这可不是我现在的身高, 我现在可要比这高! 因为你们也知道 人一出生身高肯定就是大于0的, 所以如果我想算总身高的话, 那开始就该输入20。 结果出来了,这就是我现在的身高。 好吧,我们复习一下: totalInches(总增高值)是这里的局部变量, 这是因为我们只在函数内部声明它, 它在函数外无效。 也就是说外面的代码 不会认得这个叫 totalInches(总增高值) 的变量。 而 lifeInches(一生总增高值) 就是所谓的全局变量, 这是因为我们是在全局作用域里的 所有函数外面声明它的。 请牢记住这点: 所以当你在写函数和变量时, 想清楚自己要的是 只在函数内部用的局部变量, 还是在整个程序里用的全局变量。 要是你觉得被这两个概念搞得头晕眼花了, 也不用担心, 因为这也是编程里最棘手的概念之一, 在 JavaScript 里更为尤甚。 但这也是熟能生巧的事儿。