函数声明:
var function obj() {
console.log('我是函数声明')
};
函数表达式:
函数表达式分为两种:1、命名函数表达式;2、匿名函数(函数表达式)。
命名函数表达式:
命名函数表达式属于函数表达式的一种特殊形式
var obj_has_name = function obj_has_name () {
console.log('我是函数表达式的一种特殊形式')
}
匿名函数(函数表达式):
我们常说的函数表达式就是指匿名函数
var obj_no_name = function() {
console.log('我是一般形式的函数表达式')
}
函数的name属性:
命名函数表达式与函数声明的name属性就是函数名字,匿名函数没有name属性或为空(不同浏览器解释不同)
/*上述例子*/
obj.name == obj
obj_has_name.name == obj_has_name
obj_no_name.name == " "/undefined
函数声明与函数表达式区别:
函数提升方面:
1、函数表达式仅提升函数声明;
2、函数声明同时提升函数声明和函数定义。
function father() {
console.log(son1);//son1是函数表达式只提升函数声明,所以输出'undefined'
console.log(son2);//son2是函数声明提升函数声明与函数定义,所以输出'function son2(){....}'
var son1 = function() {
console.log('我是函数表达式')
}
function son2() {
console.log('我是函数声明')
}
}
father()
Note:
还有一个式关于函数的术语常听到的——函数字面量,函数字面量常用来表示函数表达式(匿名函数)或者命名函数表达式,由于概念模糊不建议使用。