【问题标题】:Replace a variable in a function with the value in javascript用javascript中的值替换函数中的变量
【发布时间】:2018-11-16 15:02:09
【问题描述】:

我正在寻找一种将函数中的变量替换为其实际值的方法。我打算将此函数转换为字符串并通过 HTTP 请求发送,因此需要将函数内部的变量与其值进行转换。

let x = Math.random();

let funcString = function () {
    let y = x + 10;
    return y;
}.toString();

// Send funcString as a parameter

例如。在上面的代码中,如果我按原样发送funcString,那么接收它的人将不知道x 的值是什么。

因为我最终要发送一个字符串,所以我想发送

"function () {let y = 0.53 + 10; return y;}"(假设 Math.random() 在运行时产生 0.53)。

有没有办法做到这一点?

我在 nodejs 项目中这样做,所以我也可以使用 npm 模块。

【问题讨论】:

  • 只发送一个包含所有当前变量值的对象可能会更有效(也是更好的做法)。即,发送{functionBody: "...", vars: {x: 0.53}}。这样您就不必在函数中进行字符串替换,也不必担心注入、语法错误等问题。
  • 你为什么要这样做? y 的值是确定的,为什么不只发送值呢?
  • 我还要回答为什么要这样做而不是发送 result 的问题?当您拥有当前上下文中的所有信息时,将函数发送到其他地方进行评估有什么好处?通常,如果您确实需要在不同的上下文中计算某些东西,您发送参数而不是算法。
  • 我正在使用 Highcharts 的导出服务器来生成图表,因此我需要发送自定义函数。 export.highcharts.com
  • @SayakMukhopadhyay 但我没有看到发送任何字符串。有参数和回调。您是否尝试将字符串作为回调而不是实际函数传递?

标签: javascript string variables tostring


【解决方案1】:

如果您将此函数作为 string 返回,只需使用 String#replace() method 将出现的 x 替换为其值。

这是你应该如何使用它:

funcString.replace('x', x)

演示:

let x = Math.random();

let funcString = function () {
    let y = x + 10;
    return y;
}.toString();

console.log(funcString.replace('x', x));

编辑:

如果您的变量多次出现并且可以是其他变量的一部分,只需使用 a regexreplace 方法。

funcString.replace(/\bx\b/g, x)

演示:

let x = Math.random();

let funcString = function () {
    let y = x + 10;
    let fix ='true';
    let z = x * 2;
    return y;
}.toString();

console.log(funcString.replace(/\bx\b/g, x));

【讨论】:

  • 我考虑过使用replace,但问题是我的函数中可以有很多x。虽然,我想既然这是我的代码,我可以给它一个唯一的名字。
  • 是的,这取决于您的代码,但在所有情况下,您都可以使用 regex 中的变量名进行替换。
  • 是的,全局搜索有效。我刚刚确保为要替换的变量指定一个唯一的名称。
【解决方案2】:

使用replaceregexg 将搜索所有x-es

let x = Math.random();

let funcString = function () {
    let y = x + 10;
    let a = x + 10;
    let b = x + 10;
    
    return y;
}.toString().replace(/x/g, x);

console.log(funcString);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多