作者:书友74562696 | 来源:互联网 | 2024-11-26 00:19
一、创建函数函数是一种对象:Function类是对象,可以通过Function实例化一个函数,不过最多的还是利用function来创建函数。方式一:利用Function类来实例化函
一、创建函数
函数是一种对象:Function类 是对象,可以通过 Function 实例化一个函数,不过最多的还是利用 function 来创建函数。
方式一:利用 Function类 来实例化函数:
1 var people=new Function("name","sex","if (sex==‘男‘) return name+‘先生: 您好!‘; else return name+‘女士: 您好!‘;");
2 people(‘小强‘,‘男‘) //"小强先生: 您好!"
Function类 实例化函数语法格式:var function_name = new function(arg1, arg2, ..., argN, function_body)
- 参数中前 n 个为函数的形参,最后一个为函数的函数体(执行部分);
方式二:利用 function 来创建函数,语法如下:
var a= function (参数1,参数2……){}
或 function a(参数1,参数2……){}
例:
1 function people(name,sex)
2 {
3 if (sex==‘男‘)
4 return name+‘先生: 您好!‘;
5 else
6 return name+‘女士: 您好!‘;
7 }
创建方法注意以下问题:
- 当设定参数而忘记调用参数时,Javascript引擎将自动传递一个 undefined 的参数;
- 当传递的参数超出设定参数个数时,多余的部分将自动忽略;
- Javascript通过一个 arguments 对象自动管理函数接受的参数,该对象类似于一个数组。
由以上两种方式可以看出,创建的函数最终是一样的,务必记住一点函数是一种对象,其是引用类型。
二、Javascript中的变量
Javascript中的变量分为局部变量和全局变量。
1、局部变量: 在函数内部以 var 声明的变量,只能在函数内访问,函数运行完毕会删除局部变量;
2、全局变量:
- 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
- 在函数内部未使用var 声明的变量也是全局变量,如 carname="Volvo";但是这种全局变量只有在执行所在函数后才能在全局范围内访问。
三、函数相关的属性:
1、arguments:访问函数的输入参数,由脚本解释器自动创建,具有length属性,类似于数组,可以用数组的方法访问每个参数。
例1:
1 function people(name,sex)
2 {
3
4 if (sex==‘男‘)
5 return name+‘先生: 您好!一共有 ‘+arguments.length+‘ 个参数‘;
6 else
7 return name+‘女士: 您好!一共有 ‘+arguments.length+‘ 个参数‘;
8 };
9 people(‘小强‘,‘男‘); //"小强先生: 您好!一共有 2 个参数"
10 people(‘小丽‘,‘女‘); //"小丽女士: 您好!一共有 2 个参数"
arguments使用例子 1例2:
1 function people(name,sex)
2 {
3
4 if (sex==‘男‘)
5 return arguments[0]+‘先生: 您好!一共有 ‘+arguments.length+‘ 个参数‘;
6 else
7 return arguments[0]+‘女士: 您好!一共有 ‘+arguments.length+‘ 个参数‘;
8 };
9 people(‘小强‘,‘男‘); //"小强先生: 您好!一共有 2 个参数"
10 people(‘小丽‘,‘女‘); //"小丽女士: 您好!一共有 2 个参数"
arguments使用例子 2例3:
结果如图:
1 function sum(v1,v2)
2 {
3 document.writeln(‘////////////////////////////////////////////////////////////////////////‘);
4 document.writeln(‘
调用参数:
‘);
5 document.writeln(‘参数有 ‘+arguments.length+‘ 个:
‘);
6 var s=0;
7 for(var i=0;i)
8 {
9 document.writeln(‘参数 ‘+i+‘:‘+arguments[i]+‘
‘);
10 }
11 for(var i=0;i)
12 {
13 s=s+arguments[i];
14 }
15 document.writeln(‘参数的和为: ‘+s +‘
‘);
16 document.writeln(‘////////////////////////////////////////////////////////////////////////‘);
17 };
arguments使用例子 3由例子可以看出 arguments 对象操作的只是实参,而不是形参,因此我们实际上也可以不必设置形参,当然为规范性还是指定的好。
2、callee:arguments的属性,表正在执行的函数对象。
例如:
1 function sum(n)
2 {
3 if(n<=0)
4 return 0;
5 else
6 return n+arguments.callee(n-1);
7 }
8 sum(2); //3
9 sum(100); //5050
arguments.callee使用例子3、calleer:函数对象的属性,表函数对象的父函数对象。function foo1(v1)
例:
结果:
1 function foo1(v1)
2 {foo2(v1,v1*2);}
3 function foo2(v1,v2)
4 {foo3(v1,v2,v2*2);}
5 function foo3(v1,v2,v3)
6 {
7 var foo=arguments.callee;
8 while(foo&&(foo!=window))
9 {
10 document.writeln(‘
调用参数:
‘);
11 var args=foo.arguments;
12 argn=args.length;
13 document.write(‘参数有 ‘+argn+‘ 个:\n‘);
14 for(var i=0;i)
15 {
16 document.writeln(‘args[‘+i+‘]:‘+args[i]+‘
‘);
17 }
18 foo=foo.caller;
19 }
20 };
21 document.writeln(‘////////////////////////////////////////////////////////////////////////‘);
arguments.caller应用实例4、apply 和 call 方法:将函数绑定到其他对象上执行。
apply:参数将以数组的形式传入;
call:参数以逗号隔开,作为一个列表传入。
1 function classA()
2 {
3 this.name=‘classA‘;
4 this.methodA=function(msg){return this.name+‘:‘+msg};
5 }
6 function classB()
7 {
8 this.name=‘classB‘;
9 this.methodB=function(msg){return this.name+‘:‘+msg};
10 }
11 var objA=new classA();
12 var objB=new classB();
13 objA.methodA(‘调用methodA‘); //"classA:调用methodA"
14 objA.methodA.apply(objB,[‘调用methodA‘]); //"classB:调用methodA"
15 objB.methodB.call(objA,[‘调用methodB‘]); //"classA:调用methodB"
apply 与 call 的用法
5、length :返回形参个数,指的是函数定义时期望的参数个数,与实际调用时的参数(实参)个数无关。
6、valueOf()、 toString() :返回函数的代码
7、this
- 在构造器函数中表新创建的对象的实例;
- 对象的方法被调用时,指调用该方法的对象实例;
- 当函数作为一个方法而不是一个对象的方法时,表示windows对象;
- 在函数体外,表示windows对象;