令人难以置信的快速JS循环?

时间:2015-09-21 11:42:00

标签: javascript performance loops for-loop

今天我有一个想法来检查循环的性能,我称之为"范围为"。这个想法很简单。这个循环有两个变量," i"和" l"这是定义的"一个范围更高"比循环本身。 这两个范围内没有别的东西。

我创造了jsPerf并获得了惊人的成绩。 http://jsperf.com/variable-scoped-loop/6

我决定创建我的本地测试,结果甚至更好(&#34的平均时间为1000x1000循环;&#34为标准;&#34为0.01s;&#34为范围; <。 / p>

所以现在我想知道为什么这个循环太快了。我假设它完全是关于V8的,但你永远都不知道。

所以有人愿意解释吗?

TLDR:

为什么这个循环太快了?

var loop = ( function() {
                var i, l;

                return function( length, action ) {
                    for( i = 0, l = length ; i < l ; ++i ) {
                        action();
                    }
                };
            }() );

1 个答案:

答案 0 :(得分:2)

不幸的是,这里没有任何魔力:你的测试是错误的。

对于varInForempty函数正确调用9999^2次,而使用varInScope时,它仅调用9999次。这就是为什么它完成得更快的原因。您可以通过使empty函数打印一些内容来轻松测试。

原因是变量ilvarInScope的外部和内部调用之间共享。因此,在内循环结束后,i已经等于l并且外循环立即退出。

请参阅another JSPerf了解每次初始化函数的固定版本(在闭包中创建一组新的变量),实际上,它比实际上高出20% 。 &#34;正常&#34; for loop。