【问题标题】:Function declaration vs expression from a performance point of view?从性能的角度来看,函数声明与表达式?
【发布时间】:2015-01-28 06:15:31
【问题描述】:

网络上有许多 javascript 文章将函数声明 function foo (){} 与函数表达式 var foo = function () {} 进行比较。他们通常会提到提升、条件中的行为等内容……但我不记得他们中的任何一个人谈论过性能。有什么区别吗?特别是在 ECMA5 的严格模式下(如果这改变了任何东西)。

我所说的性能当然是指执行性能(包括查找、范围遍历等),而不是声明性能,尽管这也是一个很好的了解。

【问题讨论】:

  • “性能我当然是指执行性能(包括查找、范围遍历等)” 没有。两种定义都创建了相同类型的函数对象。
  • 我能想到的唯一性能问题是在某些引擎中使用 NFE — kangax.github.io/nfe/#jscript-memory-management

标签: javascript function ecmascript-5 function-declaration


【解决方案1】:

在函数表达式可能被多次计算的情况下,函数声明会更快。例如,在循环中调用的代码中,提升的函数只计算一次,但每次都会计算一个表达式。除此之外,没有任何意义的区别。

如果您对 JavaScript 性能问题有任何疑问,我建议您查看JSPerf。另外,谷歌看看是否有人已经为你的问题做了一个,在这种情况下,他们有:

http://jsperf.com/function-declaration-vs-function-expression/15

【讨论】:

  • 我今天和昨天都在网上搜索了这个,浏览了网络上的许多文章。然而不知何故,我完全忘记了检查 jsperf。还要感谢您回答中的简短摘要。 +1,接受
  • 嗯,循环中的函数声明将是一个语法错误,所以你真的没有选择。
  • @BjornTipling:Use strict mode,也可能是浏览器不知道quirky function statements
  • 我对那个测试中的“函数声明和表达式”感到困惑,直到我意识到这是一个糟糕的、被误解的命名函数表达式......
【解决方案2】:

我在 Chrome canary 45 和 Firefox 37 中从 JSPerf 执行了相同的测试,遗憾的是结果相反:

function myfunc() {
  alert("yo");
}
myfunc();

Chrome:最快,FF:慢得多

var myfunc = function() {
    alert("yo");
    }

myfunc();

FF:最快,Crome:慢得多

所以,答案是:它取决于浏览器/JS 引擎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多