应使用块级作用域封装临时头信息,如立即执行函数或let块内定义headers,避免污染外部变量;共用逻辑可抽为不可变的headers工厂函数;关联请求宜用异步立即执行块统一管理。

用普通块(即代码块、作用域块)封装网络请求中的临时头信息,核心是把散落各处的 headers 构建逻辑收拢到请求发起前的局部作用域内,避免污染外部变量、减少重复、提升可读和可维护性。关键不在“多高级”,而在“刚好够用、一眼看清”。
用 let 块级作用域隔离 headers 变量
别在函数顶部统一声明 headers = {},再一路赋值;而是把头信息组装过程限制在真正需要它的那一小段逻辑里:
- 用
let headers = {...}在 fetch 调用前的块中定义,不暴露给整个函数 - 若需动态添加(如 token、traceId),直接在该块内条件判断或扩展,不操作外部对象
- 示例:
const response = await (function() {
let headers = { 'Content-Type': 'application/json' };
if (token) headers.Authorization = `Bearer ${token}`;
if (debug) headers['X-Debug'] = 'true';
return fetch('/api/data', { method: 'POST', headers, body: JSON.stringify(data) });
})();
抽离为纯函数:headers 工厂函数
当多个请求共用相似头规则时,把构建逻辑提取成一个无副作用的小函数,输入参数,输出 headers 对象:
- 函数名清晰表达意图,如
makeApiHeaders({ token, debug, version }) - 返回新对象,不复用或修改传入参数,确保不可变性
- 调用时直接内联使用:
headers: makeApiHeaders({ token, debug }),语义明确,无需中间变量
配合 async 函数 + 立即执行块做轻量上下文封装
对一组关联请求(如先登录再带 token 请求资源),可用立即执行的异步块统一管理临时头流转:
- 在块内获取 token → 构建 headers → 发起后续请求,逻辑闭环
- 避免把 token 或 headers 提升为函数级变量,防止误用或状态残留
- 适合临时性、流程性强的操作,比写 class 更轻,比裸写更清晰
不复杂但容易忽略:整洁度往往来自“克制声明”和“就近组织”,而不是堆砌设计模式。临时头信息本就是一次性的,就让它活在它该在的那一行附近。










