本文详解 `i++` 与 `++i` 的本质区别,指出因误用后置递增/递减导致计数器首次点击失效的问题,并提供修复方案、边界防护及最佳实践。
在 JavaScript 中,i++(后置递增)和 ++i(前置递增)虽仅差一个位置,语义却截然不同:
你遇到的“首次点击不更新数字、第二次才生效”问题,根源正在于此:
tracker.innerHTML = i++; // ❌ 错误:赋值的是旧值 i,之后 i 才 +1
例如初始 i = 0:
✅ 正确写法是使用前置递增/递减,确保赋值即同步最新值:
const donateButton = document.getElementById("donate");
const unDonateButton = document.getElementById("undonate");
const trac
ker = document.getElementById("container");
let i = 0; // 推荐用 let 替代 var
tracker.textContent = i; // 使用 textContent 更安全(防 XSS)
donateButton.addEventListener("click", () => {
donateButton.style.backgroundColor = "red";
unDonateButton.style.backgroundColor = ""; // 重置另一按钮样式
tracker.textContent = ++i; // ✅ 立即更新并显示新值
});
unDonateButton.addEventListener("click", () => {
if (i > 0) {
unDonateButton.style.backgroundColor = "blue";
donateButton.style.backgroundColor = ""; // 重置另一按钮样式
tracker.textContent = --i; // ✅ 安全递减
} else {
alert("Cannot undonate: quantity is already zero!");
}
});⚠️ 关键注意事项:
总结:看似微小的 i++ 与 ++i 差异,实则是值传递时机的根本分歧。理解运算符求值顺序,是写出可预测、可维护前端逻辑的第一步。