5.5 Function类型
函数有两种定义方式函数声明和函数表达式。
//函数声明
function sum(num1,num1){
return num1+num2;
}
//函数表达式
var sum = function(num1,num1){
return num1+num2;
}
其中,函数表达式必须先定义后使用。就像是一个变量一样。
函数声明可以先使用,后定义。
5.5.1 没有重载
函数名是一个指针。指向了一个函数。所以重新定义函数只会覆盖。
function sum(num1,num1){
return "第一个sun";
}
var sum = function(num1,num1){
return "第二个sun";
}
alert(sum()); //第二个sum
上边代码可以近似理解为:
var sum = "第一次";
var sum = "第二次";
alert(sum); //"第二次"
5.5.3作为值的函数
函数也可以被当成实参传进去
此处给test()函数传入了chat1,并且返回结果。
function chat1(){
return "这里是chat1";
}
function test(fun,str){
return fun()+str;
}
alert(test(chat1,"进入")); //这里是chat1进入
5.5.4函数内部元素this
this引用的是函数的执行环境。
getColor()返回this的color属性,把他赋值给 i 和 j 作为方法。
然后调用,就会返回 i 和 j 环境的color元素。
function getColor(){
return this.color;
}
var i = {color:"blue"}
i.getColor = getColor;
var j = {color:"red"}
j.getColor = getColor;
alert(i.getColor()); //blue
alert(j.getColor()); //red
5.5.5函数属性方法
在js中函数也是对象,所以有函数的属性和方法。
length属性表示函数希望接受的命名参数个数
function t1(num1,num2){
}
function t2(str){
}
alert(t1.length); //2
alert(t2.length); //1
call()方法功能是改变函数定义域,在这里把testCall的定义域修改为c1和c2的。所以输出red和blue。
apply()j和call()区别只是call()可以传递多个实参,apply()只能传递数组。
var c1 = {color:"red"};
var c2 = {color:"blue"};
function testCall(str){
return this.color+str;
}
alert(testCall.apply(c1,"12")); //"red"
alert(testCall.call(c2,"13")); //"blue"