函数概述-对象-重载-匿名函数-闭包
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)
定义完成立刻执行,执行完毕立刻释放
2、匿名函数回调:将函数作为对象传递给其他函数
什么时候使用,有另一个函数决定
优点:节省内存空间
缺点:无法反复使用
5、闭包:包括不必计算的变量的函数,函数可以使用函数外定义的变量
犀牛书:函数变量可以被隐藏于作用域链中,看起来是函数将变量包裹起来
函数套函数
闭包:提升变量生存周期,即可长久保存,又不会被全局污染
如何创建闭包:
1、定义外层函数,用来封装一个受保护的局部变量;
2、定义内层函数,执行对外层函数局部变量的操作
3、外层函数返回内层函数对象,并且外层函数被调用,结果保存在全局变量中
三个特点:
1、函数嵌套;
2、内层函数使用外层函数的局部变量
3、内层函数被返回到外部,在外部调用
when:反复使用局部
4000
变量,又避免全局污染
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
变量,又避免全局污染
相关文章推荐
- JavaScript作用域、上下文环境、函数对象的定义与调用、匿名函数的定义与调用、闭包
- JavaScript之基础-13 JavaScript Functions (Function对象、创建函数、匿名函数、闭包)
- JavaScript作用域、上下文环境、函数对象的定义与调用、匿名函数的定义与调用、闭包
- JavaScript的小小总结!变量类型、对象声明、this用法、原型、匿名函数、闭包和自执行函数
- 调用操作符的重载与函数对象
- 【C++】面向对象类成员函数的重载、覆盖与隐藏
- 常用对象操作用(重载)函数原型
- 变量对象,作用域链,闭包,匿名函数,this关键字,原型链,构造器,js预编译,对象模型,执行模型,prototype继承
- 高阶函数、返回函数、闭包、匿名函数、装饰器、偏函数
- JavaScript关于闭包,匿名函数,this,对象等的一些理解
- 5.3 Python 函数对象与闭包
- python函数对象和闭包
- c++构造函数,函数重载,复合类,类和对象
- 面向对象编程基础 一 匿名对象,函数重载和构造函数
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- JavaScript面向对象(2)——函数与闭包(函数、对象、闭包)
- 匿名函数和闭包规避xdebug限制的函数递归深度限制
- C++ 重载调用操作符和函数对象
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- Python对象类型判断与函数重载