您的位置:首页 > 其它

函数概述-对象-重载-匿名函数-闭包

2017-08-22 10:09 295 查看
函数:封装一项专门任务步骤的代码段,然后起一个名字;

when:当一项任务需要反复执行时,又不希望重复编写;

代码重用!!!

how:声明 定义 调用

声明并定义一个函数

function 函数名([参数变量列表]){

函数体:任务步骤

[return 返回值]

}

调用函数执行:在任何位置:函数名([参数变量列表]);

注: 函数只有在调用的时候才会执行

反复调用就会反复执行相同代码

why:代码重用!!!

一处定义,反复使用

一次修改,处处生效

函数参数:专门用来接收传入函数内数据的变量

when:当函数必须某些数据才可以正常执行时

参数可以让方法变得更加灵活

how:function 函数名(变量1,变量2….变量n)

如何传递参数值:调用时:函数名(值1,值2,….值n)

注:一般情况下值的个数和顺序,应与声明时参数列表一致

返回值:方法调用后返回的执行结果 –>一个数据

如何返回数据:在函数体中 return 返回值;

1、return单独使用表示退出函数执行的意思

2、函数仅负责返回数据,不负责保存数据

如何获得返回值:var 变量 = 函数名()

变量作用域:一个变量可用范围

1、全局作用域:变量可以在程序的任何位置被访问;

2、局部作用域:变量仅能在函数调用时,函数被访问;

1、全局变量:定义在全局作用域中的变量

1、 直接在函数外部声明的变量

全局变量都属于window对象–全局对象:相对于变量而言就是保存多个数据

2、无论在任何位置,为从未声明过的变量赋值时

自动在全局创建同名全局变量

2、局部变量:定义在函数作用域中的变量

1、函数内部定义或声明的变量

2、参数变量天生就是局部变量

函数定义和调用:

1、声明和定义函数时:

在window中创建函数名变量

在window外创建函数定义的对象–>封装函数的定义

函数名变量保存了指向函数对象的地址

2、调用时,创建局部变量

3、在调用过程中:

如果局部有,不用全局

如果局部没有,用全局

如果局部全局都没有,报错

4、调用结束,释放所有局部变量

声明提前:在函数被调用之前或程序执行之前

将var声明的变量和function声明的函数

提前到当前作用域的顶部集中创建

赋值留在原地

函数按值传递:js无论变量间赋值或使用变量传递参数时,都是将变量中的值复制一个副本给对方

全局函数:isNaN parseInt parseFloat

alert prompt不是全局函数 (BOM)

函数递归:函数自己调用自己

1、**函数对象

2、**重载overload

3、*内存中的Function对象

4、**匿名函数

5、[b]*****[/b]闭包

1、Function对象:js中一切都是对象

函数名其实就是引用函数定义对象的变量

1、arguments对象:

重载:程序中同时定义多个相同函数名不同参数列表的函数;

调用时调用者不必区分每个函数的参数;

执行时,动态选择匹配的函数执行;

注:不是技术只是一个现象、概念

js语法不支持重载,但可通过arguments对象模拟出重载

arguments对象:函数对象内,自动创建专门接受所有参数值的类数组对象

when:不同参数,不同操作,但是操作名称相同;

why:减轻调用者调用者调用时选择的负担

arguments[i]:获取下标为i的参数值

.length 可以获得参数值的个数

注:即使定义了参数变量,argunments对象同样可以修改参数值,同样会受到所有参数个数

2、函数对象:

创建函数对象:3种

1、声明方式创建:

function 函数名(参数列表){函数体;return 值};

函数名和函数定义都会被提前;

在调用前后定义都可以

2、函数直接量创建:

var 函数名 = function(参数列表){函数体;return 值};

仅函数声明提前

函数定义保留在本地

必须在定义后调用

3、使用new创建函数类型的对象

var 函数名 = new Function(“参数”,”参数2”…”函数体”);

3、内存中函数对象:

内存同时创建了两个对象:

函数对象:函数定义

作用域链对象:保存了函数对象可用的变量位置的对象

调用函数时:又会创建一个新的对象

活动对象:专门保存局部变量的对象

在作用域链对象中追加指向活动对象的引用

调用结束后:作用链中活动对象引用出栈

活动对象因为无人调用而释放

4、匿名函数:定义时不指定函数的名字的函数

when:2种

1、匿名函数自调用 (IIFE)

定义完成立刻执行,执行完毕立刻释放

(function(a){

})(a)


2、匿名函数回调:将函数作为对象传递给其他函数

什么时候使用,有另一个函数决定

优点:节省内存空间

缺点:无法反复使用

5、闭包:包括不必计算的变量的函数,函数可以使用函数外定义的变量

犀牛书:函数变量可以被隐藏于作用域链中,看起来是函数将变量包裹起来

函数套函数

闭包:提升变量生存周期,即可长久保存,又不会被全局污染

如何创建闭包:

1、定义外层函数,用来封装一个受保护的局部变量;

2、定义内层函数,执行对外层函数局部变量的操作

3、外层函数返回内层函数对象,并且外层函数被调用,结果保存在全局变量中

三个特点:

1、函数嵌套;

2、内层函数使用外层函数的局部变量

3、内层函数被返回到外部,在外部调用

when:反复使用局部
4000
变量,又避免全局污染
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 对象 闭包 重载