函数的三种定义方法分别是:函数定义语句、函数直接量表达式和Function()构造函数的方法。
1.函数定义语句
//求和函数
function sum(){
return a+b;
}
//调用函数
console.log(sum())
这是最典型的函数声明,以关键字function开始,其后跟随函数名称标识符、一对圆括号(包含由0个或多个逗号隔开的参数名称)和一对花括号(包含0条或多条JS语句,构成函数体)。这种函数定义方式需要显式的指定函数名称,在代码执行前就被解释器加载到作用域中,这个特性可以让我们在函数定义之前就调用该函数。
2.函数直接量表达式
//求阶乘的函数
var factorial =function fact(x){//将函数赋值给一个变量
if(x<0){
return NaN;
}else if(x===0){
return 1
}else x*fact(x-1)//递归函数
}
console.log(factorial (3))//6
与函数定义语句一样,函数直接量表达式也是用到了关键字function。一般这种定义方式适用于将它作为一个大的表达式的一部分,比如在赋值和调用过程中定义函数。通过函数直接量生成的函数,函数名称可以省略,此时就是一个匿名函数。
3.Function()构造函数
var f = new Function('x','y','return x+y')//构造函数
Function()构造函数可以传入任意数量的字符串实参,最后一个实参所表示的文本是函数体,可以包含任意数量的JavaScript语句。如果构造的函数不包含任何参数,则只需传入一个函数体即可。与前两者方式不同的是,Function()构造函数允许JavaScript在运行时动态地创建并翻译函数。每次调用Function()构造函数都会解析函数体,并创建新的函数对象。因而,在循环或多次调用的函数中执行这个构造函数,执行效率会受影响。相比之下,循环中的嵌套函数和函数定义表达式则不会每次执行时都重新编译。