You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数参数addy在API请求模板字符串中引用时提示未定义问题

问题解决:ReferenceError: addy is not defined

原始代码

const getAbi = async (addy) => {
  const url = `https://api.arbiscan.io/api?module=contract&action=getabi&address=${addy}&apikey=${arbiscanKey}`;
  const abi = await axios.get(url);
  console.log(abi);
  return abi;
};

报错信息

const arbiscanGetAbi = `https://api.arbiscan.io/api?module=contract&action=getabi&address=${addy}&apikey=${arbiscanKey}`;
                                                                                            ^

ReferenceError: addy is not defined

问题原因

报错里的arbiscanGetAbi变量是在函数作用域外部定义的,而addy是getAbi函数的参数,只有在函数内部才能访问到。实际运行的代码和你贴出的原始代码不一致——应该是把原本在函数内的url变量改成了全局的arbiscanGetAbi,导致模板字符串执行时找不到addy。

解决方法

1. 恢复函数内定义模板字符串

确保包含${addy}的模板字符串定义在getAbi函数内部,这样就能正常访问函数参数:

const getAbi = async (addy) => {
  // 模板字符串在函数内部,可访问addy参数
  const url = `https://api.arbiscan.io/api?module=contract&action=getabi&address=${addy}&apikey=${arbiscanKey}`;
  const abi = await axios.get(url);
  console.log(abi.data); // 实际ABI数据在响应的data属性中
  return abi.data;
};

2. 适配多版本API域名

如果需要动态切换不同网站版本的API,可把域名做成参数或配置变量,同样在函数内引用:

// 外部定义多环境API域名配置
const apiConfigs = {
  mainnet: 'https://api.arbiscan.io',
  testnet: 'https://api-testnet.arbiscan.io'
};

const getAbi = async (addy, env = 'mainnet') => {
  const baseUrl = apiConfigs[env];
  const url = `${baseUrl}/api?module=contract&action=getabi&address=${addy}&apikey=${arbiscanKey}`;
  const abi = await axios.get(url);
  return abi.data;
};

// 调用示例:获取测试网合约ABI
getAbi('0x...', 'testnet');

额外注意

  • 确认arbiscanKey在函数作用域内可访问,如果是私有密钥,建议作为参数传入函数,避免全局暴露。
  • axios请求返回的是完整响应对象,实际的ABI数据存储在response.data中,直接返回原响应对象可能不符合预期。

内容的提问来源于stack exchange,提问作者Ofir Smolinsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:15:54