一、声明提前(hoist)

在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地

二、三种创建函数的方式

1、声明方式创建函数--会被声明提前

function 函数名(形参1,形参2形参3。。。){

    函数体

    return 返回值

}

这一段会提到当前作用域顶端

2、赋值方式

var fun=function(形参1,形参2,形参3。。。){

函数体

    return 返回值

}

只会把var fun提前

三、重载(overload)

相同函数名,不同形式参数列表的多个函数,在调用时,可自动根据传入实际参数的不同,选择对应的函数调用,减少函数名的数量,减轻维护负担

应用场合:一件事,可能根据传入的参数不同,执行不同的操作

js默认不支持重载,不允许多个同名函数同时存在,如果存在,最后一个函数会覆盖之前所有

解决办法:arguments对象

arguments对象:每个函数内自动创建,准备接收所有传入函数的实际参数的类数组对象

    自动创建:

    接收所有的实际参数:

    类数组对象:长的像数组的对象

        数组:下标 length 遍历

四、匿名函数

定义函数,不写名的函数

定义:如果一个函数只使用一次,不会反复使用,就不起函数名

为什么:节约内存,使用一次后,自动释放

场景:

    (1)回调函数:自己定义的函数,自己不调用,而是传给其他对象或者函数,被别人调用

    (2)匿名函数自调:定义函数后,立刻自己调用自己

五、作用域(scope)

全局和局部

js只有两种作用域,window的作用域和函数的作用域,for,while等均不是作用域

六、闭包

闭包,重用变量又保护变量不被篡改的编程方式,内部函数调用内部函数

1、步骤:

    (1)、外层函数包裹内层函数和受保护的变量

    (2)、外层函数将内层函数return到外部

    (3)、调用外层函数,获得内层函数对象,保存在外部变量中

09-21 08:09