如何从WebhookScript全局变量中获取并调用函数
解决WebhookScript中全局存储函数后无法调用的问题
问题原因
当你把函数存入全局变量$sub$时,WebhookScript会将函数序列化为字符串存储。后续用var('$sub$')取出的是字符串类型,而非可执行的函数对象,所以直接调用会报Trying to invoke a non-function 'string'错误。
解决方案
根据全局变量存储的内容类型,选择以下两种方法将字符串转回可执行函数:
1. 存储函数体时用Function构造函数
如果全局变量$sub$仅存储函数体(比如"return a - b"),可以通过Function构造函数创建新函数:
// 从全局变量取出函数体字符串 const funcBody = var('$sub$'); // 构造函数,指定参数和函数体 const sub = new Function('a', 'b', funcBody); // 调用函数 const subX = sub(1, 2); // 返回-1
2. 存储完整函数时用eval转换
如果全局变量$sub$存储的是完整的函数定义字符串(比如"function(a, b) { return a - b }"),可以用eval将字符串转为函数对象:
// 从全局变量取出完整函数字符串 const funcStr = var('$sub$'); // 转换为函数 const sub = eval(funcStr); // 调用函数 const subX = sub(1, 2); // 返回-1
注意事项
- 使用
eval时要确保全局变量的内容是可信的,避免注入恶意代码。 - 优先推荐
Function构造函数的方式,比eval更安全,也更清晰。
内容的提问来源于stack exchange,提问作者Alex S
相关产品推荐
相关产品推荐

