我们在工作的地方讨论了一段时间,我们没有找到答案:
声明这样的函数:
function myFunction(){
//...
}
在表演上有所不同,而不是像这样做:
var func = function myFunction(){
//...
}
如果没有,差异在哪里?
答案 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.
强>
答案 2 :(得分:0)
这些应该没有明显的性能差异。
这种函数声明还有另一个不同之处,我相信你应该在javascript中读取函数和变量提升。
test(); // "X"
function test() {
console.log("X");
}
anotherTest(); // TypeError: undefined is not a function
var anotherTest = function () {
console.log("Y");
}