在可变冲击性能中声明功能吗?

时间:2013-10-17 09:10:21

标签: javascript

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

声明这样的函数:

function myFunction(){
  //...
}

在表演上有所不同,而不是像这样做:

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

如果没有,差异在哪里?

3 个答案:

答案 0 :(得分:3)

不,表现没有差异。

严格地说,前者是正常的"函数声明",后者正在分配一个"函数表达式"变量,但在调用时,它们被相同地处理。

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

答案 1 :(得分:1)

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

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

第二个片段显示了一个函数表达式。这涉及使用“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.

查看Named function expressions demystified

答案 2 :(得分:0)

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

这种函数声明还有另一个不同之处,我相信你应该在javascript中读取函数和变量提升。

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

anotherTest(); // TypeError: undefined is not a function
var anotherTest = function () {
    console.log("Y");
}