javascript函数详解
js中的函数是对象,每个函数都是Function类型的实例,函数名只是一个指向函数对象的指针,不会和函数绑定。js函数声明方法如下:
//方法一
function sum(num1,num2){
return num1+num2;
}
//方法二
var sum = function(num1,num2){
return num1+num2;
}; //注意分号,sum是函数的引用
//方法三
var sum = new Function("num1","num2","return num1+num2") //不推荐
函数名是指向函数的指针,也就是说一个函数可以有多个指针指向它
function sum(num1,num2){
return num1+num2;
}
var anotherSum = sum;
sum = null;
alert(anotherSum(10,10)); //20
Js的函数没有重载的概念
function addSomeNumber(num){
return num + 100;
}
function addSomeNumber(num){
return num +200;
}
alert(addSomeNumber(100)); //300 第二个会覆盖第一个
函数声明和函数表达式
alert(sum(10,10));
function sum(num1,num2){
return num1+num2;
}
//可以正常运行,js解析器会通过一个名为函数声明提升的过程,把函数放到前面
alert(sum(10,10));
var sum = function(num1,num2){
return num1+num2;
}
//错误!函数位于一个初始化的语句中
函数可以当做参数传递,也可以将一个函数作为另一个函数的返回值返回,典型的列子是:对象数组排序问题(以某个属性排序)
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:"zs",age:20},{name:"nb",age:23}];
data.sort(createComparisonFunction("name"));
alert(data[0].name); //nb
关于sort的方法可以参考我之前的文章ECMAScript引用类型之Array类型