engine.put("globalVariable", myVariable)
To measure that this variable belongs to the engine, each script engine works with this variable, here is an example:
ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); engine.put("status",0); engine.eval("status++; println(status);"); //print 1 engine.eval("status++; println(status);"); //print 2
If you want to pass some script area parameters to you script, you should use bindings
ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); Bindings bindings=engine.createBindings(); bindings.put("status",0); Bindings bindings2=engine.createBindings(); bindings2.put("status",0); engine.eval("status++; println(status);",bindings); //print 1 engine.eval("status++; println(status);",bindings2); //print 1
Further, the variable defined in the script, if you do not use bindings, all of them are the scope of the engine:
ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); engine.eval("var status=0; status++; println(status);"); //print 1 engine.eval("status++; println(status);"); //print 2
If you use bindings, the variable defined in the script is the binding area, it will not pollute the area of โโthe engines.
ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); Bindings bindings=engine.createBindings(); //bindings.put("status",0); Bindings bindings2=engine.createBindings(); //bindings2.put("status",0); engine.eval("var status=0; status++; println(status);",bindings); //print 1 engine.eval("status++; println(status);",bindings2); // exception, status not defined