可能重复:
JavaScript: var functionName = function() {} vs function functionName() {}
Function declaration - Function Expression - Scope
我已经了解了var a = 1
,正在定义一个局部变量,但是谈论函数,我认为它只在当前范围内可用,因为var变量的行为,以下两个代码片段之间有什么区别?
function aPrint() {
console.log('a');
}
var a = function aPrent() {
console.log('a');
}
答案 0 :(得分:1)
您的第一个示例是“函数声明”。它声明了一个函数,该函数将在声明它的作用域中的任何位置可用(因此您可以在它出现在源代码中之前调用它)。这有时被称为“吊装”(因为,它被提升到其范围的顶部)。
您的第二个示例是“命名函数表达式”。变量声明被提升到定义它的作用域的顶部(如函数声明),但是赋值仍然发生在您期望的位置,因此在将函数分配给变量之后才能调用该函数。
还有第三个选项,它只是一个“函数表达式”,其中函数没有名称(它是一个匿名函数):
var a = function() {
console.log('a');
}
您可能会发现您对命名函数表达式几乎没有用处(尽管它在调试时很有用),因此通常最好使用匿名函数。在命名函数表达式中,名称仅在函数本身的范围内,因此您无法正常通过名称引用该函数。
答案 1 :(得分:-1)
这是一篇可以帮助你的最佳文章。
参考http://www.dustindiaz.com/javascript-function-declaration-ambiguity/