在JavaScript中,函数本身与其他任何的内助对象在地位上是没有区别的,函数本身也是对象。
在JavaScript中:
函数可以被赋值给一个变量
可以被赋值为对象的属性
可以作为参数被传入别的函数
可以作为函数的结果被返回
可以用字面量来创建
1.函数对象
通过new 操作符来创建
var add=new Function("x","y","return(x+y)");
通过字面量来创建
function add(x,y){
return x+y;
}
var add=function(x,y){
return x+y;
}
2. 函数的参数
在JavaScript中,函数的参数是比较有意思的,比如,你可以将任意多的参数传递给一个函数,即使这个函数声明时并未制定形式参数,比如:
function adPrint(str,len,option){
var s=str ||"default";
var l=len ||s.length;
var o=option || "i";
s=s.substring(0,1);
switch(o){
switch(o) {
case "u":
s=s.toUpperCase();
break;
case "1":
s=s.toUpperCase();
break;
default:
break;
}
print(s);
}
}
adprint("hello,world");
adprint("hello,world",5);
adprint("hello,world",5,"1"); //lower case
adprint("hello,world",5,"u"); //upper case
函数adPrint在声明时接受三个形式参数:要打印的串,要打印的长度,是否转换为大小写的标记。但是在调用的时候,我们可以按顺序传递给adrint一个参数,
两个参数,或者三个参数
3.函数上下文
在JavaScript中,函数也是一种对象,并非其他任何对象的一部分。函数的上下文是可以变化的,因此,函数内的
this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,总之,函数本身是独立的。
可以通过Function对象上的call或者apply函数来修改函数的上下文:
4.call和apply
call 和apply通常用来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。
//定义一个人,名字为jack
var jack ={
name:"jack"'
age:26
}
//定义另一个人,名字为abruzzi
var abruzzi ={
name:"abruzzi",
age:26
}
//定义一个全局的函数
function printName(){
return this.name;
}
.//设置printName的上下文为jack,此时的this为jack
print(printName.call(jack));
//设置printName的上下文为abruzzi,此时的this为abruzzi
print(printName.call(abruzzi));
print(printName.apply(jack));
print(printName.apply(abruzzi));
只有一个参数的时候call和apply的使用方式是一样的,如果有多个参数:
apply的第二个参数为一个函数需要的参数组成的一个数组,而call则需要跟若干个参数,参数之间以逗号隔开即可