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

Node.js中如何调用get_switch返回的函数并即时执行

如何直接执行get_switch返回的函数?

首先得说,你当前的写法有两个关键问题:一是app.js里的return语句存在语法错误(字符串没闭合),二是核心问题——你返回的是字符串形式的函数调用语句,而不是函数本身,所以没法直接执行。

最优解决方案:返回函数引用而非字符串

这是最安全、最清晰的做法,直接返回函数本身,拿到后就能立刻执行。

修改后的app.js:

global.get_switch = function(coin_name) {
  switch(coin_name) {
    case 'BTC':
      return get_btc; // 直接返回函数引用,不要加括号
    case 'BCH':
      return get_bch; // 这里注意你原代码里的笔误:是get_bch不是get_bth
    default:
      console.log('default');
      return null; // 返回null或者空函数,避免后续调用报错
  }
}

然后在demo.js里,你可以这样调用:

// 方式1:先存再执行,加判断避免报错
const targetFn = get_switch('BTC');
if (targetFn) {
  targetFn();
}

// 方式2:更简洁的可选链写法(ES2020+支持)
get_switch('BTC')?.();

// 你的函数定义
function get_btc() {
  console.log('btc');
}

function get_bch() {
  console.log('bch');
}

为什么推荐这种方式?

  • 完全规避了eval带来的安全风险(如果用字符串执行的话,eval会执行任意代码,万一输入不可控就会出问题)
  • 代码语义更明确,直接操作函数本身,可读性更高

特殊场景:必须返回字符串的情况(不推荐)

如果因为老项目限制等原因,只能返回字符串形式的函数调用,那可以用eval来执行,但一定要确保coin_name的输入是完全可控的,避免注入风险:

修改app.js的语法错误(闭合字符串):

global.get_switch = function(coin_name){
  switch(coin_name){
    case 'BTC':
      return 'get_btc();'; // 补全字符串闭合引号
    case 'BCH':
      return 'get_bch();'; // 修正笔误+补全引号
    default:
      console.log('default');
      return '';
  }
}

然后demo.js里执行:

const fnStr = get_switch('BTC');
if (fnStr) {
  eval(fnStr); // 仅在输入完全可控时使用!
}

function get_btc() {
  console.log('btc');
}

function get_bch() {
  console.log('bch');
}

内容的提问来源于stack exchange,提问作者Sarus Crane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:13:27