这可能是一个显而易见的问题,但我想知道在一次性使用变量中声明某些内容或仅执行一次代码(而不是存储它然后使用它)之间是否存在效率差异。例如
var rowId = 3,
updateStuff(rowId);
VS
updateStuff(3);
这可能是一个显而易见的问题,但我想知道在一次性使用变量中声明某些内容或仅执行一次代码(而不是存储它然后使用它)之间是否存在效率差异。例如
var rowId = 3,
updateStuff(rowId);
VS
updateStuff(3);
我认为在这种情况下担心性能在很大程度上是无关紧要的。这些类型的微优化并没有真正为你买那么多。在我看来,这里代码的可读性更重要,因为识别3
asrowId
比将其保留为幻数更好。
如果您真的关心优化,那么使用Google Closure 之类的东西最小化您的代码会有所帮助;它有许多工具可以帮助您提高代码效率。
如果您使用 google 闭包进行编译并且您将 var 注释为常量(如您的示例中所示),我怀疑编译器会删除该常量并将其替换为文字。
我的建议是选择可读的选项,如果你真的需要微优化和减少源代码大小,请使用 google 闭包编译器或压缩器——一个工具更有可能积累足够的微优化,使某些东西明显更快,虽然我猜大部分节省的毫秒数将来自缩小网络时间的减少。
并且 var 声明确实需要时间,如果您将该 var 添加到全局命名空间,那么在解析名称期间还会搜索另一件事。
使用编译代码的现代浏览器,生成的代码将完全相同,除非该变量也在其他地方引用。
即使使用旧浏览器,如果存在差异,也不必担心。
编辑:
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 是否这样做。