很多人都说,局部变量比JavaScript中的全局变量更快,例如:
function ()
{
// Local variable
var a = 9
}
例如,我一直在考虑将全局Math对象别名化为本地Mathl变量,或者将特定(常用)函数别名化为局部变量/函数(如Mathround()),而不是使用Math.round()。
现在,我正在考虑使用的东西(例如Math.round())可以在每个动画帧(50ish)中使用很多次,并且每秒可以有60帧。因此,如果我这样做,将会避免相当多的查找。 - 这只是我能做到的一个例子。我可以使用很多类似的变量。
所以我的问题是 - 这真的值得吗?当避免这么多查找时,差异是否有形?
答案 0 :(得分:1)
如果你不知道它是否值得,那么它可能不是。换句话说,您应该通过识别,测量和测试特定于情境的备选方案来解决发生时的性能问题。
当你开始写人类可以理解的东西时,编写清晰,可读,可维护的代码是很困难的。如果您尝试编写计算机可以执行更快的内容(在您甚至知道应用程序方面的意味着什么之前),那就更难了。 注重清晰度并解决性能问题。
至于你的具体例子。如果你想知道答案,then test it。
答案 1 :(得分:0)
如果在本地范围内调整父范围变量,查找会更快。多快了?区别是否显着?只有您可以通过衡量代码的性能来判断。
将document
别名为局部变量并不罕见。
例如,请查看ExtJS库的this part。
(function() {
var DOC = document,
然而,就像已经说过的那样,要小心别名对象成员函数,因为你可能会遇到this
值问题。
E.g。
var log = console.log;
log('test'); //TypeError: Illegal invocation
//you could use bind however
log = console.log.bind(console);
答案 2 :(得分:0)
说你有这段代码:
for(...) {
someFunc();
var y = Math.cos(x);
...
}
执行Math.cos(x)
JS VM必须a)计算全局Math对象的位置,b)获取它的cos
属性。以防万一someFunc()
内的人不做这样的疯狂事情,例如:
Math = {};
一般来说,JS对局部变量的访问与已知索引访问数组元素类似(如果不准确)。访问全局对象几乎总是通过键映射来查找。