我
请解释`function foo() {}`和`var foo = function() {}`之间`foo`的用法上的区别。
难度:
前者是函数声明,后者是函数表达式。关键的区别在于函数声明会使函数体提升(具有与变量相同的提升行为),但函数表达式的函数体不能。有关变量提升的更多解释,请参阅上面关于变量提升的问题。如果你试图在定义函数表达式之前调用它,你会得到一个Uncaught TypeError: XXX is not a function
的错误。
函数声明
js
foo(); // 'FOOOOO'
function foo() {
console.log("FOOOOO");
}
函数表达式
js
foo(); // Uncaught TypeError: foo is not a function
var foo = function () {
console.log("FOOOOO");
};