定义函数的方式:函数声明、函数表达式
1.函数声明
(1)语法:
function functionName(arg0,arg1,arg2){
//函数体
}
首先是function关键字,然后是函数的名字,这就是指定函数名的方式。Firefox、Safari、Chrome和Opera都给函数定义了一个非标准的name属性,通过这个属性可以访问到给函数指定的名字。这个属性的值永远跟在function关键字后面的标识符中。
//只在Firefox、Safari、Chrome和Opera有效
alert(functionName.name); //"functionName"
(2)特征:函数声明提升
在执性代码之前会先读取函数声明,这就意味着可以把函数声明放在调用它的语句后面。
sayHi();
function sayHi(){
alert("Hi!");
}
2.使用函数表达式
(1)匿名函数的创建
var functionName=function(arg0,arg1,arg2){
//函数体
};
创建一个函数并将它赋值给变量functionName,此情况下创建的函数叫匿名函数,因为function关键字后面没有标识符,匿名函数的name属性是空字符串。
(2)使用前必须先赋值
例1:以下代码会导致错误
sayHi(); //错误:函数还不存在
var sayHi=function(){
alert("Hi1")
};
例2:不同的函数会根据condition被赋值给sayHi
var sayHi;
if(condition){
sayHi=function(){
alert("Hi!");
};
}
else{
sayHi=function(){
alert("Yo!");
};
}
例3:创建函数再赋值给变量,也就能够把函数作为其他函数的值返回
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;
}
};
}
createComparisonFunction()返回了一个匿名函数。返回的函数可能会被赋值给一个变量,或者以其他方式被调用;不过,在createComparisonFunction()函数内部,它是匿名的。在把函数当成值来使用的情况下,都可以使用匿名函数。