Tampermonkey中smoothscroll.js的do-while赋值表达式报错修复求助
解决do-while循环中赋值作为条件的报错问题
这个报错其实是Tampermonkey内置的代码检查工具(类似ESLint)的“善意提醒”——它默认认为条件表达式里应该是比较逻辑(比如==/===),而不是赋值操作=,怕你是手滑写错了。但你这种写法其实是合理的(常用于遍历DOM父元素),功能没问题,只是不符合检查器的默认规则而已。下面给你两种简单的修复方案:
方案1:把赋值移到循环体内(最推荐,代码更清晰)
你的原代码大概是这样的:
function overflowingAncestor(el) { var elems = []; var rootScrollHeight = root.scrollHeight; do { // 这里是你处理el的逻辑,比如push到数组里 elems.push(el); } while (el = el.parentNode); // 这里触发报错 }
可以把赋值操作从while条件里移到do循环的末尾,然后while只判断el是否存在:
function overflowingAncestor(el) { var elems = []; var rootScrollHeight = root.scrollHeight; do { elems.push(el); // 把赋值移到循环体内 el = el.parentNode; } while (el); // 直接判断el是否为真值,逻辑和原来完全一致 }
这种写法更符合代码规范,检查器不会再报错,可读性也更好。
方案2:用括号包裹赋值表达式(最小改动)
如果你不想调整代码结构,只需要给while里的赋值加一层括号,告诉检查器“我是故意这么写的”:
function overflowingAncestor(el) { var elems = []; var rootScrollHeight = root.scrollHeight; do { elems.push(el); } while ((el = el.parentNode)); // 外层加括号,消除报错 }
如果遇到更严格的检查器,还可以加个注释明确说明:
} while ((el = el.parentNode) /* 有意使用赋值作为循环条件,遍历父元素 */);
两种方案都能解决报错,而且完全不影响脚本的原有功能,选哪种看你自己的代码习惯就好~
内容的提问来源于stack exchange,提问作者Black
相关产品推荐
相关产品推荐

