如何在Node.js模块环境下实现函数的动态调用?
Node.js 模块内动态调用函数的实现方案
Node.js 模块存在作用域隔离,顶级作用域下声明的函数/变量不会默认挂载到全局对象,因此不能直接复用浏览器window[函数名]的写法,以下是两种可行实现方式:
推荐方案:使用自定义映射对象存储待调用函数
这种方案可控性最高,不会污染全局作用域,也能避免调用到预期外的方法:
// 把所有需要动态调用的函数统一放到映射对象中管理 const funcMap = { action() { GLOBAL_VAR = 3 } } let GLOBAL_VAR = 0 let funcName = 'action' // 从映射对象取对应函数执行 funcMap[funcName]() console.log(GLOBAL_VAR) // 输出 3
不推荐方案:挂载到全局global对象
如果你一定要复用和浏览器类似的全局调用写法,可以手动把函数挂载到global对象,但容易造成全局变量冲突,非常不推荐:
// 手动挂载函数到全局对象 global.action = function action() { GLOBAL_VAR = 3 } let GLOBAL_VAR = 0 let funcName = 'action' global[funcName]() console.log(GLOBAL_VAR) // 输出 3
注意:不要使用eval实现该需求,会带来严重的安全风险,同时大幅降低代码可维护性。
内容的提问来源于stack exchange,提问作者bbKid
相关产品推荐
相关产品推荐

