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