Компиляция не регистрирует функцию hello()
, она просто анализирует код JavaScript.
Вам необходимо выполнить код для функции, которая будет зарегистрирована.
Помните, что в JavaScript между этими двумя операторами очень мало различий, за исключением того, что function
объявления поднимаются и поэтому могут использоваться перед оператором объявления:
function hello(arg) {return 'Hello ' + arg;};
var hello = function(arg) {return 'Hello ' + arg;};
Есть поэтому мало причин для отдельной компиляции кода БИБЛИОТЕКИ, вы просто запускаете его и сохраняете все созданные глобальные переменные, которые являются методами библиотеки. Например, после выполнения кода БИБЛИОТЕКИ у вас будет глобальная переменная с именем hello
.
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
Compilable compilable = ((Compilable) engine);
// Process LIBRARY code
Bindings bindings = new SimpleBindings();
engine.eval(LIBRARY, bindings);
// Compile SCRIPT code
CompiledScript actualScript = compilable.compile(SCRIPT);
// Run SCRIPT code
bindings.put("foo", "world");
Object result = actualScript.eval(bindings);
System.out.println(result);
Вывод
Hello world