3

这两位中哪一位执行(计数)更快?

var i = 0;
while(true){
    i++;
}

或者

var i = 0;
inc = function(){
    i++;
    inc();
}

如果循环代码/函数变长,首选方式会改变吗?

4

2 回答 2

7

这只会给你一个堆栈溢出,因为递归没有结束条件:

var i = 0;
inc = function(){
    i++;
    inc();
}

对于足够大的i,这将比标准循环更快地失败。

更一般地说,调用函数比循环的开销更大。当它有助于您的代码可重用或可读时,请创建一个函数。一个循环很快。

于 2012-08-20T11:32:13.787 回答
4

如果您的迭代次数很少,那也没关系。调用函数有更多开销,但这对于短循环并没有太大的区别。

第二种方法受堆栈大小的限制。如果迭代次数过多,它将耗尽堆栈空间并崩溃。

因此,第一种方法会运行得更快,但整个问题是没有实际意义的,因为第二种方法在一个足够长的循环中崩溃的风险很大,以至于速度会有所不同。

于 2012-08-20T11:32:02.583 回答