马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一. Function对象
1.重载:程序中同时定义多个相同函数名,不同参数列表的函数。调用时,根据传入参数的不同,动态选择匹配的函数执行。
注意:js的语法是不支持重载的。但可以使用arguments实现重载效果。
何时使用重载:不同参数,不同操作,但操作名称相同
使用重载的目的:减轻调用者调用时选择的负担
arguments: 所有函数对象中默认都有的,专门接收调用时传入参数的值的“类数组对象”——>长得像数组的对象
有2点像数组:arguments.length: 获得参数值的个数
arguments<i>: 获得下标为i位置的参数值
- 例如:
- //重载
- function calc(){
- if(arguments.length==1){
- return arguments[0]*arguments[0]
- }
- else if(arguments.length==2){
- return arguments[0]+arguments[1]
- }
- }
- console.log(calc(14)); //196
- console.log(calc(12,24)); //36
-
- 比较:类数组对象 与 数组 的区别 1. 类数组对象不是Array类型 2.数组是Array类型的对象 参数变量优点: 提醒调用者,如何正确使用函数。 参数变量更简便。 2. 内存中的函数对象,3个阶段: 定义时,创建2个对象:函数对象和作用域链对象 函数对象:封装了函数的定义,但暂时不读取函数定义 作用域链对象:专门保存函数可用的变量所在位置的对象 调用时,创建1个新对象:活动对象 活动对象:临时封装本次调用函数时使用的局部变量,并将活动对象的引用, 压入作用域链对象中 调用后:作用域链中的活动对象引用出栈,活动对象及其内部的局部变量一同释放! 如何创建函数对象:3种方式 1. 声明方式:function 函数名(参数列表){函数体;return 值},只有声明方式才能被提前! 2. 函数直接量: var 函数名=function(参数列表){函数体;return 值} 3. new Function: var 函数名=new Function("参数1","参数2",...,"函数体"); :js中创建函数三种方式: function compare(a,b){return a-b;} var compare=function(a,b){return a-b;} var compare=new Function("a","b","return a-b;");
- 例如://声明提前
- function fun(){
- console.log(1);
- }
- fun(); //2
- function fun(){
- console.log(2);
- }
- fun(); //2
- var fun=100;
- console.log(fun); //100
复制代码
- //声明提前
- function fun(){
- console.log(1);
- }
- fun(); //1
- var fun=function(){
- console.log(2); //2
- }
- fun();
- var fun=100; console.log(fun); //100
复制代码
3.匿名函数:定义时没有变量引用的函数
何时使用:
1. 匿名函数自调:定义完立刻执行,执行完立刻释放
何时使用自调:一个函数只用一次!
如何使用:
(function(参数列表){
函数体;
return 值
})(参数列表);
- //匿名函数自调
- var n=10;
- (function(n){
- n--;
- console.log(n);
- })(n); //9 console.log(n); //10
复制代码
2. 匿名函数回调:将函数作为对象传递给其他函数,由其他函数调用。
何时使用回调:如果一个函数只被另一个函数调用时,就使用回调。
优点:节省内存空间
缺点:无法反复使用
- //匿名函数的回调
- var arr=[3,5,2,1,6,4,7];
- arr.sort(function(a,b){return a-b}); console.log(arr);
复制代码
|