第四章

4JavaScript函数

1. 函数基本介绍

 

① 为什么需要函数

函数最大的好处就是对零散的代码进行封装。封装以后,相同的功能以后就不用再书写了,只需要直接调用写好的函数即可。

函数在有一些地方又被称之为方法。

 

JS里面函数的创建

1)有一个叫做function的关键字

语法:   function 函数名(形式参数)

{

//函数体

}

 

 

2)通过对象来创建函数

var  变量名(函数名)  =  new Function("形式参数1","形式参数2","形式参数n","函数体");

 

 

③ 函数的调用

方法非常简单,只需要写上函数名,后面跟上一对括号,如果需要参数传递过去,括号里面就需要写参数。

 

 

④ 函数的参数

首先必须明确:不要加var,加了反而报错

 

1)参数名可以重复,同名的参数取最后一个参数值

 

2)即使在函数声明中声明了参数,你也可以不传递参数值

 

 

3)调用函数的时候可以传递若干个参数过去,不用管函数声明时有几个参数

 

当一个函数要被执行的时候,系统会在执行函数体之前做一些初始化的工作,其中之一为函数对象创建一个arguments的对象属性。arguments就有点像是一个数组,用来接收传递过来的参数的。

 

 

这里简单介绍几个函数体相关的属性

1. length:事实上就是传递过来的参数的个数

 

 

2. caller属性

该属性并不是arguments的属性。是函数对象本身的属性。它的作用就是显示函数的调用者。如果函数是在全局执行环境下被调用,那么它的值就是null,如果是在另一个函数中被调用,它的值就是那个函数。

全局执行环境下被调用:

 

 

被一个函数所调用:

 

效果:

 

 

3. callee属性

callee属性就是arguments的属性:表示正在执行的函数,也就是函数本身

 

结果:

 

⑤ 函数的返回值

函数返回的关键字为return,但是即使不写return,也会有返回值。会返回一个undefined

 

 

2. 函数的进阶

① 回调函数

所谓回调函数,顾名思义,就是回头再调用函数的过程。

例如:函数A有一个参数,这个参数是一个函数B,当函数A执行完之后,就会去执行函数B,这个过程我们就叫做回调。(再通俗的来讲,就是讲函数作为参数传递给另外一个函数)

 

 

② 匿名函数

所谓匿名函数,从字面上我们去理解,就是没有名字的函数就是匿名函数。

如下:在这里,我们将整个函数赋值给了一个变量test,所以现在这个test变量就相当于函数的名字,我们可以  变量名()  同样可以达到调用函数的目的

 

 

匿名函数还有一种方法可以调用它。将整个函数都用一对括号包裹起来,后面再跟上一对括号。这个时候我们的函数就会立即执行。

 

最终弹出5

课堂练习:使用匿名函数计算从1加到100

 

 

3. 变量作用域和生命周期(重要)

JavaScript里面没有块级作用域

C语言里面,我们可以通过一对花括弧来产生一个作用域,如下:

 

 

 

JavaScript里面没有块级作用域

 

 

② 执行环境

所谓执行环境,一般就是和函数挂钩,每个函数都有自己的执行环境

 

这里由于i是在函数里面声明,所谓外界无法访问到这个i

 

 

③ 作用域链

如果在函数中没有声明,就直接使用了某个变量,那么该函数会从它作用域链一层一层往外找,直到找到全局变量环境都还没有找到,就会报错。

 

④ 查询标识符

当函数里面遇到一个变量时,如果内部没有,会顺着作用域链一层一层往外找,直到找到最近的那个变量,并使用它。

 

posted @ 2017-03-12 16:35  KOE  阅读(149)  评论(0)    收藏  举报