本文为阅读博文http://wiki.jikexueyuan.com/project/javascript-garden/function/general.html后总结而得
函数声明
函数声明会在执行前被解析,所以即使在调用的代码后进行函数声明,依然能够正常运行该函数
foo(); // 正常运行,因为foo在代码运行前已经被创建
function foo() {}
函数表达式
在执行前会解析其将要赋值到的变量,而赋值这一活动则要到真正执行程序时才会运行。在运行到赋值语句之前,存在变量,但变量值为undefined。
foo; // 'undefined'
foo(); // 出错:TypeError
var foo = function() {};
命名函数的赋值表达式
var foo = function bar() {
bar(); // 正常运行
}
bar(); // 出错:ReferenceError
由于bar函数已经赋值给了foo,所以bar在函数外是不可见的,但在函数内是可见的。