【问题标题】:JavaScript evaluate expression without return in functionJavaScript 在函数中计算表达式而不返回
【发布时间】:2021-06-21 01:53:18
【问题描述】:

最近由于一些向后兼容性问题,我们不得不更改 GraalVM API Javascript 引擎的底层实现,这导致了一些我想解决的向后兼容性(问题与纯 JS 相关,所以请耐心等待)。简而言之,我想知道是否有任何方法可以编写这样一个不需要 return 语句的函数,并且表达式在函数声明的末尾就足够了。代码如下:

(function (input) {
  // START
  const { firstSource } = input

  ({
    "firstDestination": firstSource
  })
 //END
})({"firstSource": "input"})

START -> END 代码块(这是在任何情况下都不能更改的东西,因为它是用户定义脚本的一部分,有一些合同)。我不是 JS 专家,所以任何提示都会非常有帮助,因为我在 IIFE 等上花了很多时间,但无法提出任何有效的解决方案。

【问题讨论】:

  • 所以你想隐式返回{"firstDestination": firstSource}?据我所知,这是不可能的。
  • 您的意思是我们可以在 START 之前和 END 之后添加代码,但不能在两者之间添加代码,并且您希望新代码可以返回用户定义代码的最后一个表达式,对吗?
  • @hackape 正确
  • 我猜eval 可以提供帮助。但我需要尝试一下。

标签: javascript function iife


【解决方案1】:

eval(code) API 将评估本地范围内的任何代码,并且即使没有 return 关键字,也会返回最后一个表达式作为其值。这可能是您正在寻找的解决方案。

例子:

function run(input) {
  return eval(`
  // START
  const { firstSource } = input; // I add a semi here, think it’s an error

  ({
    "firstDestination": firstSource
  })
  // END
`)
}

console.log(run({"firstSource": "input"}))

【讨论】:

    猜你喜欢
    • 2017-08-30
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多