“ do ... while”语句中的意外分配。为什么会出现这种不良习惯,我该怎么办?

时间:2018-09-20 06:35:15

标签: javascript ecmascript-6 eslint

我收到错误提示: [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);
};

1 个答案:

答案 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);