3

我们已经在我工作的地方讨论了一段时间,但没有找到答案:

是否声明这样的函数:

function myFunction(){
  //...
}

与这样做相比,在性能上有所不同:

var func = function myFunction(){
  //...
}

如果不是,区别在哪里?

4

3 回答 3

3

不,性能上没有区别。

严格来说,前者是一个普通的“函数声明”,而后者是将一个“函数表达式”分配给一个变量,但在调用时它们的处理方式相同。

最显着的区别(并且它不影响性能)是由于提升函数声明将可以在范围内的任何位置访问,但在使用函数表达式的版本中,变量func将被声明但直到行之后才可var func = ...

于 2013-10-17T09:13:10.470 回答
1

不同之处在于,带有 var 的函数是运行时定义,而其他函数是脚本的解析时间定义。

第一个例子是函数声明。这使用“function”语句来创建一个函数。该函数在解析时可用,并且可以在该范围内的任何地方调用。您仍然可以稍后将其存储在变量或对象属性中,

第二个片段显示了一个函数表达式。这涉及使用“函数”运算符创建一个函数,该运算符的结果可以存储在任何变量或对象属性中。这样,函数表达式就很强大了。函数表达式通常被称为“匿名函数”,因为它不必有名字,

Function expressions can actually be seen quite often. A common pattern in web development is to “fork” function definitions based on some kind of a feature test, allowing for the best performance. Since such forking usually happens in the same scope, it is almost always necessary to use function expressions.

看看命名函数表达式揭秘

于 2013-10-17T09:13:33.910 回答
0

这些应该没有显着的性能差异。

这种函数声明还有另一个区别,我相信你应该阅读一下javascript中的函数和变量提升。

test(); // "X"
function test() {
    console.log("X");
}

anotherTest(); // TypeError: undefined is not a function
var anotherTest = function () {
    console.log("Y");
}
于 2013-10-17T09:17:48.647 回答