【问题标题】:What is optimal method for accessing function parameters in javascript?在javascript中访问函数参数的最佳方法是什么?
【发布时间】:2009-11-17 18:38:55
【问题描述】:

在这些类似的函数定义中,访问参数的最佳方式是什么?为什么?

function DoStuff()
{
    return arguments[0] + arguments[1] + arguments[2];
}

function DoStuff(first, second, third)
{
    return first + second + third;
}

一个分配的内存是否比另一个少?一个比另一个更快地访问参数值?

【问题讨论】:

  • 这种东西的性能在做javascript的时候不应该是你关心的问题,不管是什么,到最后都无所谓。
  • 最优的概念仅根据一些最优标准定义:) Optimal=best。在这种情况下,似乎没有人关心性能最优方法,只关心可维护性最优。

标签: javascript optimization


【解决方案1】:

这是我的测试:

    function Test1()
    {
        var start = new Date();
        for (var i = 0; i < 1000000; i++)
        {
            DoStuff1(i, i + 1, i + 2);
        }
        var done = new Date();

        alert(done - start);
    }

    function Test2()
    {
        var start = new Date();
        for (var i = 0; i < 1000000; i++)
        {
            DoStuff2(i, i + 1, i + 2);
        }
        var done = new Date();

        alert(done - start);
    }

    function DoStuff1()
    {
        var result = arguments[0] + arguments[1] + arguments[2];
    }

    function DoStuff2(first, second, third)
    {
        var result = first + second + third;
    }

结果如下:

IE      FF

Test1()
2355    402
2381    395
2368    392

Test2()
504     6
507     7
505     7

我认为测试 2 会更快,但速度要快得多。因此,它不仅可读性更强,而且效率更高。

【讨论】:

  • 是IE8吗?它说明了我想要表达的观点——javascript 解释器的性能完全不同。新引擎一直在问世。
  • 从长远来看,你会用 jQuery 测量 $(this) 所花费的时间吗?每次调用 2 毫秒(IE 案例)实际上可以对库编写者产生影响。
【解决方案2】:

在这种情况下忘记性能并追求可读性。从这个角度来看,选项 (2) 更受欢迎——不过,我会选择更具描述性的名称。 ;-)

【讨论】:

  • 这不是问题的答案。一个分配的内存是否比另一个少?一个比另一个更快地访问参数值吗?
  • 是的。它确实回答了 the 问题,尽管不是帖子中提出的所有问题。引用参数的最佳方式是最易读的方式。
  • 你得到问题的point了吗?这是一个有趣的问题,如果仅来自“学术练习”POV。
  • @Crescent Fresh -- 我不想为此大吵一架,但你明白我回答的重点吗?对此的内存占用和速度考虑远远低于良好命名和可读性的重要性,因此可读性较差的版本是否更快也没关系。
  • @Crescent Fresh -- 和其他反对者 -- 请注意该问题被标记为“最佳实践”。我很难相信人们真的觉得专注于这种微优化实际上更像是一种最佳实践,而不是良好的命名和可读性。
【解决方案3】:

第二个。

使用第二个,您可以根据签名确切地知道调用该方法时所期望的内容。将来的可维护性也容易得多。

【讨论】:

    【解决方案4】:

    在函数中的任何位置引用 arguments[] 会显着降低许多浏览器的性能。

    【讨论】:

    • 嘿,是的,它会降低性能;减少是否显着取决于您的计划。我很想看到一个非人为的例子,它实际上很重要...
    【解决方案5】:

    两者之间的性能差异应该可以忽略不计,但是命名参数的可读性是更好的做法。有时您不能使用命名参数,在这种情况下,我通常使用一大块脚本将参数解压缩到命名局部变量中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 2021-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多