将“ this”类分配给变量是否具有优势?

时间:2019-11-03 06:47:54

标签: javascript

我有时在this中使用event指针,但有时我会使用类似的东西

if (this.value < x && this.value < y && this.value == z)

如果我将其分配给变量,会更好吗

var val = this.value;
if (val < x && val  < y && val  == z)

或没有性能差异,因为我不知道每次使用this.value是否已注册或撤回

1 个答案:

答案 0 :(得分:3)

是的,它可以提高性能,在某些 old Javascript引擎中-引擎 可能必须查找this对象,然后查找该属性在能够评估value之前,this.value的描述符/值。例如,在IE11上运行以下代码

(function() {
  const t0 = performance.now();
  const obj = { value: true };
  (function() {
    const value = this.value;
    for (let i = 0; i < 1e8; i++) {
      this.value;
    }
  }).call(obj);
  const t1 = performance.now();
  console.log(t1 - t0);
})();

https://jsfiddle.net/vmq9gb7o/4/

与运行用this.value;替换为value的相同代码:https://jsfiddle.net/vmq9gb7o/3/

相比,

花费的时间大约是 double

但是在现代浏览器中,差异似乎并不明显。

即使这样,极端也不大可能成为性能瓶颈。如果您实际上担心性能,最好进行实际性能测试。发现的任何瓶颈很可能不会出现在属性查找中。为了编写高质量,可维护的脚本,首先要针对可读性进行更好的优化,并且只有在确实存在问题时才担心微优化。

最好避免使用premature optimization

也就是说,特别是使用这段代码,将属性提取到独立变量一次中然后再引用该独立变量会更费力,因此无论性能如何,您的{{1 }}版本可能更可取。