我们已经在我工作的地方讨论了一段时间,但没有找到答案:
是否声明这样的函数:
function myFunction(){
//...
}
与这样做相比,在性能上有所不同:
var func = function myFunction(){
//...
}
如果不是,区别在哪里?
我们已经在我工作的地方讨论了一段时间,但没有找到答案:
是否声明这样的函数:
function myFunction(){
//...
}
与这样做相比,在性能上有所不同:
var func = function myFunction(){
//...
}
如果不是,区别在哪里?
不,性能上没有区别。
严格来说,前者是一个普通的“函数声明”,而后者是将一个“函数表达式”分配给一个变量,但在调用时它们的处理方式相同。
最显着的区别(并且它不影响性能)是由于提升函数声明将可以在范围内的任何位置访问,但在使用函数表达式的版本中,变量func
将被声明但直到行之后才可用。var func = ...
不同之处在于,带有 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.
这些应该没有显着的性能差异。
这种函数声明还有另一个区别,我相信你应该阅读一下javascript中的函数和变量提升。
test(); // "X"
function test() {
console.log("X");
}
anotherTest(); // TypeError: undefined is not a function
var anotherTest = function () {
console.log("Y");
}