我有时在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
是否已注册或撤回
答案 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 }}版本可能更可取。