JavaScript函数应使用const/let声明局部变量以隔离业务逻辑,避免var;拆分复杂逻辑为单一职责小函数;用闭包封装私有状态;禁止隐式依赖this或全局变量,参数化配置确保可测试性。

在 JavaScript 函数中用局部变量隔离业务逻辑,核心是利用函数作用域限制变量可见性,让每个函数只关心自己的输入、处理和输出,不污染外部环境,也不依赖外部状态。
用 const 和 let 声明局部变量
避免用 var(存在变量提升和函数作用域问题),优先使用 const 声明不可变的中间值,用 let 声明可能重新赋值的临时状态。这些变量天然绑定在函数块级作用域内,退出函数即销毁。
-
✅ 推荐:
function calculateTotal(items) { const taxRate = 0.08; let subtotal = 0; items.forEach(item => subtotal += item.price); return subtotal * (1 + taxRate); } -
❌ 避免:
function calculateTotal(items) { taxRate = 0.08; subtotal = 0; /* 没加声明关键词 → 变成全局变量 */ }
把复杂逻辑拆成小函数,各自维护独立局部变量
一个函数只做一件事,每件事所需的变量都定义在自己内部。这样既降低单个函数的认知负担,又自然实现逻辑与数据的隔离。
- 比如处理用户订单:可拆为
validateOrder()(只操作order和校验规则)、calculateDiscount()(只读order.items和user.tier)、formatReceipt()(只基于计算结果生成字符串) - 每个子函数的参数和局部变量互不影响,改其中一个不会意外影响另一个
用闭包封装私有状态(进阶但实用)
当需要在多次调用间保持某些状态,又不想暴露给外部时,可用闭包——外层函数返回内层函数,内层函数访问外层的局部变量,而这些变量对外不可见。
function createCounter() { let count = 0; return () => { count++; return count; }; } const counter = createCounter(); console.log(counter()); // 1-
count是真正的私有变量:只能被返回的函数修改,外部无法直接读写
避免通过 this 或全局对象“借”变量来共享逻辑
不要为了复用而在函数里访问 this.xxx(尤其在普通函数而非 class 方法中)或 window/config 这类外部引用。这会让函数隐式依赖上下文,破坏可测试性和复用性。
- ✅ 正确做法:把所需配置作为参数传入,例如
function formatPrice(amount, { currency = '¥', decimals = 2 }) { ... } - ✅ 或者用工厂函数提前绑定配置:
const formatUSD = formatPriceFactory({ currency: '$' });
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











