//命名函数表达式
var add = function add(a,b){
return a+b;
}
//函数表达式,又名匿名函数
var add = function(a,b){
return a+b;
}
//函数声明
function add(a,b){
return a+b;
}
在某些方面,函数声明和函数表达式几乎等同,然后这并不完全是这样,其区别在于提升的行为。
function foo(){
alert("global foo");
}
function bar(){
alert("local bar");
}
function hoistMe() {
console.log(typeof foo); //输出"function "
console.log(typeof bar); //输出"undefined"
foo(); //输出"local foo"
bar(); //输出"Typeerror:bar is not a function"
//函数声明,变量foo以及函数体都被提升
function foo() {
alert("local foo");
}
//函数表达式
//仅仅变量bar被提升,函数实现并不会提升
var bar = function() {
alert("local bar");
}
}
从以上的例子可以看出,和正常的变量一样,仅存在于hoistMe()函数中的foo和bar移动到了顶部,从而覆盖了全局的foo和bar.两者之间的区别在于局部foo的定义被提升到了顶部而且正常的运行,即使在后面才定义它。bar()的定义并没有被提升,仅有它的声明被提升。
待定p67
自定义函数p70