2

这可能是一个显而易见的问题,但我想知道在一次性使用变量中声明某些内容或仅执行一次代码(而不是存储它然后使用它)之间是否存在效率差异。例如

var rowId = 3,
updateStuff(rowId); 

VS

updateStuff(3);
4

4 回答 4

1

我认为在这种情况下担心性能在很大程度上是无关紧要的。这些类型的微优化并没有真正为你买那么多。在我看来,这里代码的可读性更重要,因为识别3asrowId比将其保留为幻数更好。

如果您真的关心优化,那么使用Google Closure 之类的东西最小化您的代码会有所帮助;它有许多工具可以帮助您提高代码效率。

于 2013-06-11T16:41:29.647 回答
0

如果您使用 google 闭包进行编译并且您将 var 注释为常量(如您的示例中所示),我怀疑编译器会删除该常量并将其替换为文字。

我的建议是选择可读的选项,如果你真的需要微优化和减少源代码大小,请使用 google 闭包编译器或压缩器——一个工具更有可能积累足够的微优化,使某些东西明显更快,虽然我猜大部分节省的毫秒数将来自缩小网络时间的减少。

并且 var 声明确实需要时间,如果您将该 var 添加到全局命名空间,那么在解析名称期间还会搜索另一件事。

于 2013-06-11T16:41:29.350 回答
0

使用编译代码的现代浏览器,生成的代码将完全相同,除非该变量也在其他地方引用。

即使使用旧浏览器,如果存在差异,也不必担心。

于 2013-06-11T17:08:44.820 回答
-2

编辑:

delete不适用于非对象,因此我最初的反应是错误的。此外,由于变量 rowId 是用标志声明的var,它将被垃圾收集器清除。另一方面,如果没有定义它,它将在页面/应用程序的持续时间内存在。

来源: http: //lostechies.com/derickbailey/2012/03/19/backbone-js-and-javascript-garbage-collection/


变量 rowId 将保存在内存中,并且不会被垃圾收集器释放,因为它被引用。除非你之后像下面那样释放它,否则它会一直存在到程序生命结束。还要记住创建变量需要时间(最少,但你问过)

   var rowId = 3
   updateStuff(rowId); 
   delete rowId

考虑到效率,那么是的,这是有区别的。您的第二个示例是最快的,并且不会花费任何额外的资源。

OBS。有些语言确实会优化代码并简单地删除序列,但我强烈怀疑 JavaScript 是否这样做。

于 2013-06-11T16:41:04.817 回答