如何管理参数

时间:2014-12-25 21:42:19

标签: javascript arguments

如果我在使用搜索引擎方面做得太糟糕,我会提前道歉,这已经得到了解答。在这种情况下,请指出正确的方向。

我最近开始在函数中使用arguments变量,现在我需要对它进行切片。我看到的每个地方人们都在做这样的事情:

function getArguments(args, start) {
    return Array.prototype.slice.call(args, start);
}

根据MDN,这对性能不利:

  

您不应该对参数进行切片,因为它会阻止JavaScript引擎中的优化(例如V8)。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

我有没有理由不看到有人做这样的事情:

function getArguments(args, start) {
    var i, p = 0;
    var len = args.length;
    var params = [];

    for (i = start; i < len; ++i) {
        params[p] = args[i];
        p += 1;
    }

    return params;
}

您可以获得所需的参数,并且不会进行切片。因此,从我的观点来看,你不会在这方面放松一些东西,也许它会使用一点点额外的内存而且稍微慢一些,但是它还没有达到真正有所作为的地步,对吧?

只是想知道我的逻辑是否有缺陷。

2 个答案:

答案 0 :(得分:0)

这是discuss

这里是introduction

e.g。 here使用内联切片

答案 1 :(得分:0)

从@Eason发表的讨论中可以看出,(here)辩论是在&#34;微观化&#34;类别,即:我们大多数人都不会遇到这些性能障碍,因为我们的代码并没有经过甚至出现在雷达上所需的迭代次数。

这里总结了一句好话:

  

像这样的微优化总是需要权衡   代码的复杂性/可读性和性能之间。

     

在许多情况下,复杂性/可读性更为重要。在这种情况下,   被测试的非常慢的方法净运行4.3   微秒。如果你正在写一个网络服务而你正在切断args   每个请求两次,然后做100毫秒的其他工作,一个   额外的0.0086毫秒不会引人注意,它不值得花时间或   代码污染优化。

     

这些优化对于您正在进行数千次激活的热回路非常有用。用一个   探查器找到您的热门代码,并首先优化您最热门的代码,   直到你取得的成绩令人满意。

我很满意,并且会使用Array.prototype.slice.call(),除非我检测到指向特定代码片段的性能片段没有达到V8优化器。