找回密码
 立即注册

QQ登录

只需一步,快速开始

HTML5网页游戏和微信小游戏极速入门教程(二)基础知识 II

6
回复
1859
查看
[ 复制链接 ]

25

主题

42

帖子

286

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
286
2018-7-26 13:57:45 显示全部楼层 阅读模式
110116g7o9smlm7o99nw5o.jpg

在上一篇教程中,我们讨论了变量。在本篇教程中,我们将讨论新的概念“方法”和“作用域(也称为为生命周期,这名字太科幻了,我还是喜欢作用域)”

在编写程序的时候,我们都会尽量避免去重复地写代码。试想一下老师让我们回答问题时的场景。例如,老师把睡的迷迷糊糊的小明喊起来,问他“30+50等于多少”?小明回答“80”。然后老师又问,“那100+20呢?”,小明回答120。你是不是发现了,老师只是负责提出问题,而我们只需要告诉老师结果。在这个过程中,老师根本不管你脑子里是怎么计算的,只要你告诉他的结果是正确的就可以了(当然人的回答有时候是错误的……)
这个过程,就是我们今天所说到的“方法”。我们自己就是老师,而在程序里编写的“方法”就是学生。来看下面的代码。


  1. function jiafa(a:number,b:number):number
  2. {
  3.     var c:number = a+b;
  4.     return c;
  5. }
复制代码


如同使用var来声明一个变量一样,我们通过function来声明一个方法(有的文章里会直译为“函数”,台湾同胞则称之为“函式”)。因此function jiafa及表示我们需要声明一个名字为jiafa的方法。方法名后面的括号如上面代码的(a:number,b:number)部分。是用来说明这个方法运行时需要提供的参数的。像我们上面所举的例子,老师询问学生加法的结果,就是一个需要带参数的例子,因为老师必须要提供需要我们计算的两个数字,我们才能给出结果。而有一些情况,是不需要参数的。例如,老师问你“你是203班的吗?”,你只需要回答是或者不是就可以了,老师不需要给你附带任何条件。在这种情况下,这对用来说明参数的括号里就不用写任何内容,所以函数的声明方式会变成function jiafa()。

当然,我们还是要回到我们现在的例子上来。我们现在知道了这个方法需要两个参数,a和b,并且根据第一次教程的知识,我们知道a和b还都必须是数字型的。而这个方法的作用是什么呢?是告诉我们a和b相加的和。我们称之为方法的“返回结果”。在声明参数的括号后面,跟随的:number,就是用来说明方法的返回类型的。

因此,我们现在通过第一行代码,知道了,我们声明了一个名字为jiafa的方法,这个方法在使用的时候,需要提供两个数字型的参数,而这个方法会给我们返回一个数字型的数值。

接下来,就是方法的实际内容了。这个部分是封闭的,如同老师问我们问题的时候,完全不用管我们的大脑是怎么计算的。我们的大脑是独立且封闭的。在编程的世界中,我们通过一对大括号来做到这一点。你可以看到在第二行和最后一行,有一对大括号把中间的内容包裹了起来。

请一定记住这个概念,在函数名定义后面的大括号,分割出了一块独立的空间。

接下来,在括号里的内容我们在第一篇教程中已经接触过了。我们声明了一个数字型的变量c,它的值是a和b的和。

然后,我们接触到了一个新的关键字,return,英文直译为返回。这个就是我们前面所说的返回操作了。可以看到,我们把c返回了回去。使得这个方法功能得到了实现——我们拿到了a和b,然后计算了a和b的结果,并且返回了回来。

那么,方法究竟给我们带来了怎么样的编程改变呢?来看下面的代码:

  1. var n1:number = jiafa(10+20);
  2. var n2:number = jiafa(20+30);
  3. var n3:number = jiafa(45692+234567);
复制代码


明白了吗?现在我们再计算加法,只需要反复使用我们已经写好的方法就可以了。而当我们发生任何功能变化的时候,比如我们需要让加法的结果不超过100,那么只需要改动方法的内容,那么所有使用这个方法的位置就都发生了计算结果的变化。

另外请注意,我们所编写的代码,都是从上到下运行的,刚才的代码完整看下来应该是这样的:


  1. function jiafa(a:number,b:number):number
  2. {
  3.     var c:number = a+b;
  4.     return c;
  5. }

  6. var n1:number = jiafa(10+20);
  7. var n2:number = jiafa(20+30);
  8. var n3:number = jiafa(45692+234567);
复制代码


程序“自顶向下”运行(至少现在学到的是这样的),首先定义了方法jiafa,然后去使用这个方法。想想看,如果把使用的代码挪到前面会怎么样呢?那个时候,程序根本不知道jiafa是个什么鬼,因此就会报错啦:)

你可以动手写一个方法来实现两个数字的乘法或者除法,或者写一些更复杂的计算方法。

作用域


接下来,我们讨论一个新的概念,“作用域”。啥是作用域?你可以把他理解为所有权。比如,你口袋里有50块,我可以直接花吗?显然不行,因为这个钱不是我的。我如何能花这个钱?必须通过你,你要把钱给我,我才能花。对吧

在编程的世界里,我们通过作用域来决定一个方法或变量的归属。再来看我们刚才写的代码:


  1. function jiafa(a:number,b:number):number
  2. {
  3.     var c:number = a+b;
  4.     return c;
  5. }
复制代码


我们在jiafa这个方法内,定义了一个变量c,刚刚我们还特意强调过,我们通过大括号划出了一个独立的空间。而c这个变量刚好在空间内。因此,c的作用域就限定在了方法jiafa内。如果jiafa是你,那么c就是你口袋里的钱。他变多还是变少,除了你之外,别人是不能决定的。而对于程序世界里的c而言,就只能在jiafa这个方法的内部使用,外部是无法调用到的。你可以这样试一下:


  1. function jiafa(a:number,b:number):number
  2. {
  3.     var c:number = a+b;
  4.     return c;
  5. }

  6. trace(c)
复制代码


我们在方法之外打印一下c,你会发现是一个无效的值"undefined"。因为在jiafa外,根本没有定义过c这个变量。

再来看一个例子:


  1. var n:number = 50;
  2. function jiafa(a:number,b:number):number
  3. {
  4.     var c:number = a+b;
  5.     trace(n)
  6.     return c;
  7. }


复制代码


你觉得运行结果是什么?是的,结果会输出50。如同你口袋的钱和大街上掉的一堆钱。你可以去捡,别人也可以去捡。n是声明在方法之外的,因此,在方法内页可以使用它。而c声明在方法之内,外面却不能访问。

因此,我们在编程的时候,尽量不要让外面的变量名和内部的变量名一样,否则自己都会被搞晕的。

第二篇教程就先到这里。下一篇教程,我们将会接触到逻辑判断。希望你的编程之旅愉快:)
回复

使用道具 举报

1

主题

3

帖子

19

积分

新手上路

Rank: 1

积分
19
2018-8-5 16:46:02 显示全部楼层
万分感谢
回复

使用道具 举报

0

主题

3

帖子

24

积分

新手上路

Rank: 1

积分
24
2018-8-17 09:34:53 显示全部楼层
怎么获得阅读权限
回复

使用道具 举报

25

主题

42

帖子

286

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
286
楼主 2018-8-22 15:24:25 显示全部楼层

第三篇教程还在编写中。最近生病了,没有更新:)抱歉。完成后会开放阅读
回复

使用道具 举报

0

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
2018-11-15 15:57:23 显示全部楼层
无法按照你的代码调试出结果
捕获.JPG
回复

使用道具 举报

25

主题

42

帖子

286

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
286
楼主 2018-11-16 20:00:22 显示全部楼层
fengxiangtc 发表于 2018-11-15 15:57
无法按照你的代码调试出结果

项目是使用D5的编辑器创建的吗?
回复

使用道具 举报

25

主题

42

帖子

286

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
286
楼主 2018-11-16 20:04:31 显示全部楼层
fengxiangtc 发表于 2018-11-15 15:57
无法按照你的代码调试出结果

论坛回复可能比较慢,QQ群:425823401
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则