将函数导出到 scalajs 中的全局范围

export function to global scope in scalajs

关于 scalajs 和 javascript 的问题。

如何将函数标记为纯粹导出到全局范围?

顶级包中的给定 scala 对象

@JSExport
object Foo{
 def apply(a: Int, b: Int): String = "bar"+a+b
}

我想将此 scala 代码编译成 javascript 并在全局范围内将此函数命名为 Foo。换句话说,我想要一个类似于这样的 javascript:

function Foo(a,b) {
    return 'bar'+a+b;
}

是否可以使用 scalajs?

我正在javascript中编写组件,将引用第三方API,不受我的影响。这就是为什么我只需要遵循他们的规则并在全局范围内提供 javascript 功能。

您目前无法在不执行某些代码的情况下执行此操作。但是您可以使用分配它的设置代码:

import scala.scalajs.js

object App extends js.JSApp {
  def main(): Unit = {
    js.Dynamic.global.anything = // your js.FunctionN

  }
}

有一个未解决的问题 (#1381) 对此有语言支持。

这个问题的解决方案现在是顶级导出,如 now-closed 问题 #1381 中所述 - 要使用此功能,请在对象中用 @JSExportTopLevel 标记函数。

object A {
  @JSExportTopLevel("foo")
  def foo(x: Int): Int = x + 1
}

<Foo will be available from JavaScript's global namespace>

(官方文档见https://www.scala-js.org/doc/interoperability/export-to-javascript.html,在"Exporting top-level methods"下)