JavaScript中对象属性开销的局部变量引用

JavaScript中对象属性开销的局部变量引用,javascript,Javascript,使用局部变量作为对象属性而不是属性本身的引用是一种不好的做法吗 function Apple(){ this.type = 'green appale'; } Apple.prototype.slice = function(){ //Does this create a noticeable overhead? var type = this.type; //slicing action } 答案是肯定和否定的。从性能的角度来看,不要担心。与其他性能问题相比,这简直是小

使用局部变量作为对象属性而不是属性本身的引用是一种不好的做法吗

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

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

  //slicing action

}

答案是肯定和否定的。从性能的角度来看,不要担心。与其他性能问题相比,这简直是小菜一碟。此外,经验法则是为可读性编写代码,并且仅在需要时通过事后分析进行优化。不要预先优化

至于注意事项……如果将值保存为不可变值(string、int、boolean),则可以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`.

这可能是一个非常小的改进,但在当今时代,对世界上日益复杂的JavaScript运行时进行二次猜测是毫无意义的。请注意,
type
this.type
的副本,而不是对它的引用。每一个都可以修改而不影响另一个。它只是一个副本,因为字符串在JS中是不可变的。如果
this.type
是一个对象或数组,那么它将是一个引用。@Sukima它仍然是一个带有对象的副本,但被复制的值是一个引用。直接修改其中一个变量仍然不会影响另一个变量,但是您可以修改对象本身并查看两个变量的变化。谢谢您的回答。我知道函数的上下文是调用方。我想象性能差异不会很大,但我仍然认为我可能遗漏了一些东西。你没有遗漏任何东西。记忆可能会受到轻微的冲击,但与地球的大小相比,它只是一粒沙子。首先关注代码的可读性,不要担心沙粒。首先是人类的代码。