JS函数笔记
Function是一种引用类型,而某函数是Function引用类型的实例,有Function引用类型的固定的属性和方法。某函数名则为一个指向某函数对象的指针变量。因此,访问函数指针,则去掉函数名后面的括号,执行函数,则加上括号
定义函数的方式有两种:一种是函数声明,另一种就是函数表达式。
函数声明:
函数声明的语法:function functionName(arg0, arg1, arg2){
//函数体
}
重要特征:函数声明提升(function declaration hoisting),意思是先读取函数声明,再执行代码,因此可以把函数声明放在调用它的语句后面。这是函数声明和函数表达式的唯一区别
函数表达式:(没有提升特征)
常见形式:
var functionName = function(arg0, arg1, arg2){
//函数体
};
创建一个函数并将它赋值给变量functionName.因为function关键字后面没有标识符,所以创建的函数叫做匿名函数(anonymous function)。
如果同时使用函数表达式和函数声明,在Safari中会出错
函数是一个值的运用:将函数作为参数传递给另一个函数,将函数作为另一个函数的返回值返回
将函数对象的指针作为参数传递给另一个函数:
1.function callsomefunction(somefunction, someargument){
return somefuntion(someargument);
}
2.function add10(num){return num+10;}
将函数2作为参数传递给函数1:
result = callsomefunction(add10, 10);//result = 20
将函数对象的指针作为另一个函数返回值返回:
如:
function createcomparisonfunction(propertyname){
return function(object1, object2){
var value1=object1[propertyname];
var value2=object2[propertyname];
if(value1 < value2){return -1;}
else if(value1 > value2){return 1;}
else{return 0;}
};
}
使用这个函数来创建需要的函数:
var data = [{name:"youngcarolina", age:25}, {name:"oldercarolina", age:28}];
data.sort( createcomparisonfunction("name") );//创建以name排序的比较函数
alert(data[0].name);//oldercarolina
data.sort( createcomparisonfunction("age") );//创建以age排序的比较函数
alert(data[0].name);//youngcarolina
}
}
函数对象内部的argument和this对象
argument对象:类数组对象,包含着传入函数中的所有参数,有callee属性,是一个指针,指向拥有这个argument对象的函数。
this对象:this对象的值是函数据以执行的环境对象。
整个网页环境对象是window,某对象的环境对象就是某对象名
如:
function nowcolor(){
alert(this.color);
}
window.color = 'red';
var o = {'color':'blue'};
nowcolor();//red,nowcolor()的执行对象是window
o.nowcolor();//blue
函数对象的属性和方法:caller,length,prototype,apply(),call(),bind()
caller属性:值为调用当前函数的函数源码,在严格模式下只读
如:
function outer(){
inner();
}
function inner(){
alert(argument.callee.caller);//或inner.caller
}
outer();//outer的源代码
length属性:函数希望接受的命名参数的个数。
如:
function sum(num1, num2){return num1 + num2;}
alert(sum.length);//2
apply()和call()方法:可以设置函数体内this对象的值,实现在特定作用域内调用函数。唯一的区别是接受函数参数的方法不同
如:apply(o, [num1,num2] )或apply(this, arguments)
call(this, num1, num2)
bind()方法:创建一个把this值绑定到bind()得到的参数的函数对象,ie8以下不支持
如:
function nowcolor(){
alert(this.color);
}
var newnowcolor = nowcolor.bind(o);
newnowcolor();//blue