我收到错误提示: [eslint]“ do ... while”语句中的意外分配。 (无条件分配)
为什么会这样? 我该如何解决? 为什么我不允许这样做?为什么这是不好的做法?
window.smoothScroll = function (target) {
let scrollContainer = target;
do {
scrollContainer = scrollContainer.parentNode;
if (!scrollContainer) return;
scrollContainer.scrollTop += 1;
} while (scrollContainer.scrollTop === 0);
let targetY = 0;
do {
if (target === scrollContainer) break;
targetY += target.offsetTop;
} while (target = target.offsetParent);
const scroll = (c, a, b, i) => {
i += 1; if (i > 30) return;
c.scrollTop = (((a + (b - a)) / 30) * i);
setTimeout(() => { scroll(c, a, b, i); }, 10);
};
scroll(scrollContainer, scrollContainer.scrollTop, targetY, 0);
};
答案 0 :(得分:1)
while
期望表达式,而target = target.offsetParent
是赋值。尽管赋值确实对表达式进行了 evaluate ,但经常使用它的过程却是错误或代码异味。例如,正如棉短绒解释的那样:
if (user.jobTitle = "manager") {
上面的代码几乎可以肯定是的错字。如果要分配给变量,则最好在独立行上而不是在表达式中进行操作,以使代码对以后的读者(包括您自己)清晰可见。
在您的代码中,可以通过将其分配给target
底部的do
来解决它,然后仅将target
置于while
条件中:>
do {
if (target === scrollContainer) break;
targetY += target.offsetTop;
target = target.offsetParent
} while (target);