Javascript 是否需要分配此变量才能触发重新绘制?

Javascript 是否需要分配此变量才能触发重新绘制?,javascript,browser,Javascript,Browser,在浏览器中,访问某些属性将导致重新绘制/回流(请参阅)。我想知道是否有必要为其分配变量以导致回流: this.forceRepaint = function() { var _ = this.img.offsetWidth; }; 或者我可以把它退回(或者做一些更短的事情)?因为将它赋给一个未使用的变量似乎没有用。将您读取的值赋给一个变量与用它做其他事情相比,没有什么神奇之处。回流是由读取值引起的,而不是您对其所做的操作 正如您所说,您可以退回: this.forceRepaint = f

在浏览器中,访问某些属性将导致重新绘制/回流(请参阅)。我想知道是否有必要为其分配变量以导致回流:

this.forceRepaint = function() {
  var _ = this.img.offsetWidth;
};

或者我可以把它退回(或者做一些更短的事情)?因为将它赋给一个未使用的变量似乎没有用。

将您读取的值赋给一个变量与用它做其他事情相比,没有什么神奇之处。回流是由读取值引起的,而不是您对其所做的操作

正如您所说,您可以退回:

this.forceRepaint = function() {
  return this.img.offsetWidth;
};
…但你可能根本不需要这样做;只需离开酒店访问:

this.forceRepaint = function() {
  this.img.offsetWidth; // Yes, this really is a valid statement
};

同样,JavaScript引擎无法优化该属性的访问,除非它知道
this.img.offsetWidth
中的
img
offsetWidth
都是简单的属性(不是访问器),当然在
img
元素的
offsetWidth
属性的情况下,它是访问器(因此导致了回流)。

mate,你在我还没来得及发布之前就发布了:)+1表示超快;)变量赋值可能是死代码,但我认为JavaScript引擎不允许优化属性访问。也就是说,除非证明它们不是getter,但在DOM访问的情况下,它们是getter。是的,我知道。我正在重构其他人的插件,所以我会在清理完其他插件后立即将其删除:)@vsjn3290ckjnaoij2jikndckjb:FYI,我已经更新了答案。你应该叫它
forceReflow
,而不是
forceRepaint
。我很好奇你强制回流的用例是什么?通常你会尽量避免那些…