code: public static Object call(ContextFactory factory, final Callable callable,
                                final Scriptable scope, final Scriptable thisObj,
                                final Object[] args)
      {
          if(factory == null) {
              factory = ContextFactory.getGlobal();
          }
          return call(factory, cx -> callable.call(cx, scope, thisObj, args));
      }
docs: Call {@link
  Callable#call(Context cx, Scriptable scope, Scriptable thisObj,
  Object[] args)}
  using the Context instance associated with the current thread.
  If no Context is associated with the thread, then
  {@link ContextFactory#makeContext()} will be called to construct
  new Context instance. The instance will be temporary associated
  with the thread during call to {@link ContextAction#run(Context)}.
  <p>
  It is allowed but not advisable to use null for <tt>factory</tt>
  argument in which case the global static singleton ContextFactory
  instance will be used to create new context instances.
  @see ContextFactory#call(ContextAction)