javascript函数vs新函数

时间:2011-01-20 09:00:02

标签: javascript

根据这个基准 http://jsperf.com/function-vs-function 创建的函数运行速度快约1000倍。你能评论一下吗?

2 个答案:

答案 0 :(得分:5)

  1. 您正在呼叫f1但不是f2。即你的第二次测试除了查找参考文献外什么也没做。
  2. 所有工作实际上都是作为测试设置完成的。
  3. 我认为你想要的实际上就是这样:http://jsperf.com/function-vs-function/2 更新:第二个想法,你可能不想要这个。但是,你的第二次测试无所作为。您在();)

    之后错过了f2

    所以除了new Function慢一点之外,维护函数体也更难;)

答案 1 :(得分:2)

使用new Function - 语法,对于每个函数,JS编译器必须启动以“eval”函数体字符串 - 这很慢并且应尽可能避免:

  

每次[...] Function构造函数   在字符串表示上调用   源代码,脚本引擎必须   启动转换机器   源代码到可执行代码。这个   性能通常很昂贵 -   容易一百倍贵   比起一个简单的函数调用   例。 (Mark'Tarquin'Wilton-Jones)

如果你在StackOverflow上使用了搜索,你会发现this question提供非常详细的信息。

编辑:就像Martin在下面的一条评论中所说,有时 new Function - 构造函数是一件好事。列举一些例子:

但是:在99%的情况下,你可以使用new Function,这是一个坏主意 - 这意味着:简单地定义任何必须像它一样的功能并且不会没有某种“动态行为”,你应该总是使用“普通”函数语法来加速你的代码并避免使用eval类似new Function的功能。