在JavaScript中,函数可以分两种:一种是“没有返回值的函数”;另外一种就是“有返回值的函数”。无论是哪一种函数,都必须使用function来定义的。

一、没有返回值的函数

没有返回值的函数,指的是函数执行完就算了,不会返回任何值。

语法:

function 函数名(参数1 , 参数2 ,..., 参数n) { …… }

说明:

在JavaScript中,函数是一个用大括号{}括起来的、可重复使用的、具有特定功能的语句块。每一个函数,就是独立的语句块(看成一个整体)。用大括号{}括起来的,我们称之为语句块,像if、while、do…while、for等语句中也有。对于语句块来说,我们都是把它当成整体来处理的。

函数跟变量是非常相似的,变量用var来定义,而函数用function来定义。变量需要取一个变量名,而函数也需要取一个函数名。

在定义函数的时候,函数名不要随便取,尽量取有意义的英文名,让人一看就知道这个函数是干什么的。

对于函数的参数,是可以省略的(即不写),当然也可以是1个、2个或n个。如果是多个参数,则参数之间用英文逗号(,)隔开。此外,函数参数的个数,一般取决于你实际开发的需要。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script> //定义函数 function addSum(a,b) { var sum = a + b; document.write(sum); } //调用函数 addSum(1, 2); </script> </head> <body> </body> </html>

浏览器预览效果如下图所示:

分析过程如下图所示:

分析:

这里我们使用function定义了一个名字为addSum的函数,这个函数用于计算任意两个数之和。函数名是可以随便取的,不过一般取能够表示函数功能的英文名。

function addSum(a,b){…}

是函数的定义,这里的a、b是参数,也叫“形参”。参数的名字也是随便取的。初学的小伙伴就会问了:“怎么判断需要多少个参数啊?”其实这很简单。由于这个函数用于计算任何两个数之和,那肯定就是需要两个参数啦!

addSum(1,2)是函数的调用,这里的1、2也是参数,叫“实参”。实际上,函数调用是对应于函数定义的,像addSum(1,2)就刚好对应于addSum(a,b),其中1对应a,2对应b,因此addSum(1,2)等价于:

function addSum(1,2) { var sum = 1 + 2; document.write(sum); }

也就是说,函数的调用,其实就是把“实参”(即1和2)传递给“形参”(即a和b),然后把函数执行一遍

在这个例子中,我们可以改变函数调用的参数,也就是把1和2换成其他的试试。此外,还有一点要说明的:函数如果只有定义部分,却没有调用部分,这是一点意义都没有的。如果函数只定义不调用,则JavaScript就会自动忽略这个函数,也就是不会执行这个函数。函数只有调用的时候,才会被执行。

二、有返回值的函数

有返回值的函数,指的是函数执行完了之后,会返回一个值,这个返回值可以供我们使用。

语法:

function 函数名(参数1 , 参数2 ,..., 参数n) { …… return 返回值; }

说明:

“有返回值的函数”相对“没有返回值的函数”来说,只是多了一个return语句罢了。return语句就是用来返回一个结果。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script> //定义函数 function addSum(a, b) { var sum = a + b; return sum; } //调用函数 var n = addSum(1, 2) + 100; document.write(n); </script> </head> <body> </body> </html>

浏览器预览效果如图所示。

分析:

这里我们使用function定义了一个名为addSum的函数,这个函数跟之前那个例子的函数功能是一样的,也是用来计算任何两个数之和。唯一不同的是,这个addSum()函数会返回相加的结果。

为什么要返回相加的结果呢?因为这个相加结果在后面要用啊!现在小伙伴终于知道什么时候该用return,什么时候不用return了吧?

一般情况下,如果后面的程序需要用到函数的计算结果,就要用return返回;如果后面的程序不需要用到函数的计算结果,就不用return返回。

三、全局变量与局部变量

在JavaScript中,变量有一定的作用域(也就是变量的有效范围)。根据作用域,变量可以分为以下2种。

  • (1)全局变量
  • (2)局部变量

全局变量一般在主程序中定义,其有效范围是从定义开始,一直到整个程序结束为止。说白了,全局变量在任何地方都可以用。

局部变量一般在函数中定义,其有效范围只限于在函数之中,函数执行完了就没了。说白了,局部变量只能在函数中使用,函数之外是不能使用函数之内定义的变量的。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script> var a = "十里"; //定义函数 function getMes() { var b = a + "桃花"; document.write(b); } //调用函数 getMes(); </script> </head> <body> </body> </html>

浏览器预览效果如图所示。

分析:

变量a由于是在主程序中定义的,因此它是全局变量,也就是在程序任何地方(包括函数内)都可以使用。变量b由于是在函数内部定义的,因此它是局部变量,也就是只限在getMes()函数内部使用。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script> var a = "十里"; //定义函数 function getMes() { var b = a + "桃花"; } //调用函数 getMes(); //尝试使用函数内的变量b var str = "三生三世" + b; document.write(str); </script> </head> <body> </body> </html>

浏览器预览效果如图所示。

分析:

咦,为啥没有内容呢?这是因为变量b是局部变量,只能在函数之内使用,不能在函数之外使用。如果我们想要在函数之外使用函数之内的变量,可以使用return语句返回该变量的值,实现代码如下:

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script> var a = "十里"; //定义函数 function getMes() { var b = a + "桃花"; return b; } var str = "三生三世" + getMes(); document.write(str); </script> </head> <body> </body> </html>

浏览器预览效果如图所示: