模块导出导入系统中,将函数存为变量后以对象导出有何优势?
把函数存储为变量后以对象形式导出的优势
这个问题问得很实际!咱们先把两种写法明确出来,再拆解前者的优势:
两种写法对比
写法1:先赋值变量再批量导出
const getUsers = () => request(`https://api.github.com/users`) const getUser = (user) => request(`https://api.github.com/users/${user}`) const saveUser = (id) => request(`https://api.github.com/user/${id}`) export { getUsers, getUser, saveUser }
写法2:直接导出函数
export const getUsers = () => request(`https://api.github.com/users`) export const getUser = (user) => request(`https://api.github.com/users/${user}`) export const saveUser = (id) => request(`https://api.github.com/user/${id}`)
接下来聊聊写法1的核心优势:
提升代码可读性与维护效率:所有对外暴露的API都集中在最后一行的
export语句里,其他开发者看模块时,不用在代码里逐行找export标记,一眼就能知道这个模块提供了哪些功能。而且变量名的定义和导出分离,函数逻辑和导出逻辑清晰划分,模块结构更规整。便于中间逻辑的扩展与复用:如果后续需要给某个函数加包装(比如缓存、日志、错误捕获),直接修改变量定义的部分就行,导出语句完全不用动。比如想给
getUser加缓存:const getUser = (user) => { const cacheKey = `user_${user}` if (cache.has(cacheKey)) return cache.get(cacheKey) const result = request(`https://api.github.com/users/${user}`) cache.set(cacheKey, result) return result }导出部分依然是
export { getUsers, getUser, saveUser },完全不用修改。同时这些变量在模块内部也能直接复用,比如内部某个工具函数需要调用getUsers,直接用变量名即可,不用重复写函数逻辑。降低语法出错概率:直接导出箭头函数时,如果写法不严谨容易踩坑(比如误写成
export getUsers = () => {},这是无效语法),而先赋值再导出的写法语法更明确,不容易出现这类低级错误。TypeScript场景下更灵活:如果用TypeScript,给变量标注类型比直接给导出函数标注更清晰,尤其是多个函数共享同一类型的时候。比如:
type ApiRequestFn = (param?: string) => Promise<any> const getUsers: ApiRequestFn = () => request(`https://api.github.com/users`) const getUser: ApiRequestFn = (user) => request(`https://api.github.com/users/${user}`) export { getUsers, getUser }这种方式能统一管理函数类型,维护起来更方便。
当然,两种写法都能实现功能,但当模块的函数数量较多、后续可能需要扩展时,先赋值变量再批量导出的方式在代码的可维护性、可读性上优势会更明显。
内容的提问来源于stack exchange,提问作者Casa Lim
相关产品推荐
相关产品推荐

