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

React学习项目模拟LeetCode运行用户输入JS函数实现问询

解决方案

核心实现思路:通过构造隔离作用域的方式执行用户代码,提取目标函数后传入解析后的测试用例执行,既可以满足从多函数声明中取指定函数的需求,也能避免直接使用eval污染全局作用域。

具体实现步骤

  • 第一步:将字符串格式的测试用例解析为可直接传入函数的JS值
  • 第二步:构造隔离执行上下文,运行用户输入的代码字符串,提取目标函数containsDuplicate
  • 第三步:执行目标函数并捕获可能出现的异常(语法错误、运行时错误、函数不存在等场景)

完整代码示例

const submitHandler = () => {
  try {
    // 1. 解析字符串格式的测试用例为真实JS值
    const parsedTestCase = new Function(`return ${testCase}`)();
    
    // 2. 构造隔离作用域运行用户代码,提取目标函数
    // 所有用户代码仅在该Function的独立作用域内执行,不会污染全局
    const getTargetFunction = new Function(
      codeValue + `; return containsDuplicate;`
    );
    const targetFn = getTargetFunction();

    // 3. 校验函数存在性后执行
    if (typeof targetFn !== 'function') {
      throw new Error('未找到目标函数containsDuplicate,请检查代码声明');
    }
    const runResult = targetFn(parsedTestCase);

    // 执行成功,可将结果输出到UI展示
    console.log('代码执行结果:', runResult);
  } catch (err) {
    // 全链路捕获异常,可将错误信息输出到UI提示用户
    console.error('运行出错:', err.message);
  }
};

实现说明

  • 自动适配多函数声明场景:只要用户代码中声明了containsDuplicate函数,不管附带多少其他辅助函数,都可以正常调用,辅助函数也会被正确挂载到当前作用域供目标函数使用
  • 如果需要执行其他名称的函数,只需要把getTargetFunction中返回的函数名换成对应名称即可,比如要运行functionA就修改为; return functionA;
  • 覆盖所有常见异常场景:包含测试用例解析错误、用户代码语法错误、目标函数不存在、运行时报错等,无需额外做边界判断

注意事项

该方案仅适用于本地学习类项目,如果要上线面向公开用户使用,需要额外添加代码沙箱隔离逻辑,避免恶意代码攻击。

内容的提问来源于stack exchange,提问作者Xinrui Ma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:15:04