JavaScript中var函数和function有什么区别?

3
2个回答

2
你的第一个例子是一个“函数声明”。它声明了一个函数,该函数在声明所在的作用域中任何地方都可用(因此你可以在源代码中出现之前调用它)。这有时被称为“提升”(就像把它提升到其作用域的顶部一样)。
你的第二个例子是一个“命名函数表达式”。变量声明会被提升到定义它的作用域的顶部(就像函数声明一样),但赋值仍然发生在你期望的位置,所以在将函数分配给变量之后才能调用它。
还有第三种选择,即“函数表达式”,其中函数没有名称(它是一个匿名函数):
var a = function() {
    console.log('a');
}

你可能会发现在命名函数表达式中用处不大(虽然调试时有用),所以通常最好使用匿名函数。在命名函数表达式中,名称仅在函数本身的作用域内,因此通常无法通过名称引用该函数。


-1

这里有一篇最好的文章,可能会对你有所帮助。

请参考http://www.dustindiaz.com/javascript-function-declaration-ambiguity/

  1. function aPrint() {} 声明一个函数(但不执行它)。 通常在花括号之间会有一些代码。

  2. var a = aPrint() 声明一个变量,调用一个函数(aPrint),并将aPrint的返回值设置为a的值。

  3. var a= new aPrint() 基于aPrint函数创建一个新的对象实例。因此,该变量现在是一个对象,而不仅仅是一个字符串或数字。

对象可以包含索引字符串、数字甚至函数,你还可以添加更多的东西,它们非常棒。整个面向对象编程(OOP)的概念就是基于这个。


解释非常简洁明了!感谢您向我指出这个很棒的链接。 - mko
这个链接已经失效了。有任何重定向链接可用吗? - Ravi Shankar Bharti
这是一个很好的例子,说明为什么你不能只是链接,结果会是-1。 - Henry Howeson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接