2015-01-07 35 views
0

将局部变量用作对象属性的引用而不是属性本身是不好的做法?JavaScript中对象属性开销的局部变量引用

function Apple(){ 
    this.type = 'green appale'; 
} 

Apple.prototype.slice = function(){ 
    //Does this create a noticeable overhead? 
    var type = this.type; 

    //slicing action 

} 
+2

它可能是一个非常小的改进,但是在这个时代,对于世界上越来越复杂的JavaScript运行时间的猜测毫无意义。 – Pointy

+2

它没有任何必然的错误。请注意'type'是'this.type'的一个*拷贝,而不是对它的引用。每个可以修改而不会影响其他。 –

+0

这只是一个副本,因为字符串在JS中是不可变的。如果'this.type'是一个对象或数组,那么它就是一个引用。 – Sukima

回答

0

答案是肯定和否。从演出的角度来看,不要担心。与其他性能问题相比,这是一个蛋糕走路。除了经验法则之外,还要编写可读性代码,并且只在需要通过事后分析时进行优化。不要预先优化。

至于警告...如果你的值为节省作为一个不可变的值(字符串,整型,布尔),那么你是100%安全的做到这一点。如果它是一个对象或数组,那么您需要知道它是一个参考,并且变化也会影响变量的原始变量。最后,如果它是一个函数,那么你必须知道,你会在上面的代码示例中丢失它的上下文

function foo() {} 

var bar = foo; // Context is irrelevant. 

function foo() { 
    this.baz = 'foobar'; 
} 

var bar = foo; // You must provide a context or `this` becomes `window`. 
+0

感谢您的回答。我知道函数的上下文是调用者。我想到性能差异不会很大,但仍然认为我可能会错过一些东西。 – luleksde

+0

你不会错过任何东西。记忆可能会有一点触动,但与地球的大小相比,它又是一粒沙子。首先关注代码的可读性,不要担心沙粒。代码为人类第一。 – Sukima