*使用function语句定义
function getTriangle(base, height){
return base*height/2;
}
console.log('三角形面积: '+getTriangle(5,10));
*通过function构造函数定义
var getTriangle=new Function('base','height','return base*height/2;');
console.log('Triangle area: '+getTriangle(5,10));
*使用函数字面量表示法定义
var getTriangle=function(base, height){
return base*height/2;
};
console.log(getTriangle(5,10));
函数字面量表示法和function语句相似,但也存在一些差异:
1.function语句:直接定义函数getTriangle;
2.函数字面量:定义「function(base,height){……}」这样的匿名函数后iu,存储在变量getTriangle中。
**使用箭头函数定义(ES2015新增)
箭头函数(Arrow Function):
let getTriangle=(base, height)=>{
return base*height/2;
};
console.log(getTriangle(5,10));
箭头函数没有关键字function,而是使用表示名字由来的=>(箭头)连接参数和函数主体。
如果主体只有一条语句,表示代码块的{}可以省略。因为语句的返回值直接视为返回值,所以return语句也可以省略。所以上面的代码也可以改写成:
let getTriangle=(base, height)=>base*height/2;
console.log(getTriangle(5,10));
如果只有一个参数,参数的括号也可以省略:
let getCircle=radius=>radius*radius*Math.PI;
console.log(getCircle(5));
如果参数是空集,括号不能省略。
let show=()=>console.log('hello');
在箭头函数中,有this的绑定功能。
定义函数需要注意:
1.函数是一种数据类型,它可以作为一个变量使用。
var getTriangle=function(base, height){
return base*height/2;
};
console.log(getTriangle(5,10)); //这里结果=25;
getTriangle=2;
console.log(getTriangle); // 这里的结果=2;
如果在别的编程语言中,以上的表述应该会报错,因为getTriangle只能是作为一个方法,必须为它设置参数。但是在JavaScript中,getTriangle是一个变量存在。
2.function语句声明的是静态结构。
console.log(getTriangle(5,10));
function getTriangle(base, height){
return base*height/2;
}
在以上的语句中,如果认为定义函数即使定义变量,则第一行的语句应该会报错。因为getTriangle还没有被声明。
但是实际执行中,函数是可以正确运行的。这时因为function不是动态执行命令,而可以理解为是静态结构的关键字,简单来说就是 function语句是在解析、编译代码时注册函数的。
3. 字面量function是在运行时被解析的。