假设我们有一个对象是这样的:使用临时变量代替重复的完整引用会更好吗?
var foo = { a: { b: { c: { d: { e: { f: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] } } } } } };
我们想使用对象的各个部分在功能线沿线的:
function doStuff() {
if (foo.a.b.c.d.e.f[ 5 ] >= some_important_filter_value) {
alert("Some important filter value is " + foo.a.b.c.d.e.f[ 5 ] +
"!!\nRun for your lives!!");
}
}
而且为了便于讨论,值包含在foo
内不会在函数执行过程中或者在这个问题上经常发生变化。
它是更好来读取对象中的值,并将其存储为临时变量/常数,或完全正常通过作为值的参考对象foo
使用完整的路径?
即是
function doStuff() {
var mem = foo.a.b.c.d.e.f[ 5 ];
if (mem >= some_important_filter_value) {
alert("Some important filter value is " + mem +
"!!\nRun for your lives!!");
}
}
“更好”,如果是这样,在什么方式(S)?在谷歌Chrome浏览器的JS控制台
我自己有限的测试显示100000
while循环深深查询对象,对相同数量的循环查询一个临时变量在运行大致相同的速度的。
有效复制和存储从foo
一个值使用的临时变量任意次数,可以在某些情况下具有实用价值,只要该代码/文件大小可以被减少和可读性可以是改善,但在离开除了这个问题之外,还有什么其他有利于我们的论据?
对于现代JS解释器来说,临时变量的创建和处理肯定不会轻而易举,而不是直接引用对象内的值?
为什么,以及如何将var temp = foo.a.b.c...
是比跳绳的定义,只是通过我们已经有了参考使用值更好?
我想基本上我问的是 - 在我的参考文献中有多少点是真的,因为从长远来看,这只是一个参考 - 或者它是什么?
*“在我的参考文献中有多少点是真的,因为从长远来看,这只是一个参考”*不。在某种程度上,一种方式会比另一种更“*高效”*,但最终执行的差异将会非常小,以至于无关紧要。 – 2014-10-20 20:35:51
看起来像可读性和代码维护是另一个因素 – charlietfl 2014-10-20 20:36:05
我不会担心它,直到你分析你的代码并发现它是一个瓶颈。另一方面,可读性是一个更大的问题,因此,将'foo.a.b.c ...'复制到一个临时变量中可能是一个好主意,当你要多次引用它时。这也使得在下次意外错误输入和访问'foo.a.b.c'和'foo.a.c.b'更困难。 – 2014-10-20 20:39:47