Scopes and load()
A. Sundararajan
sundararajan.athijegannathan at oracle.com
Tue Sep 2 10:58:43 UTC 2014
No, this is not a bug. Unlike "eval", "load" does not use local scopes
(function scope, 'with' scope) etc. "load" always evaluates script using
global object as the scope. Because there is no "foo" in global scope,
the load throws ReferenceError for "foo". "eval" can see "foo" as eval
can use local scopes in non-strict mode. With "strict" mode, "eval" too
uses global scope always (does not use function scopes).
-Sundar
On Tuesday 02 September 2014 03:35 PM, David P. Caldwell wrote:
> Is this a bug?
>
> scopes.js
>
> with({ foo: "bar" }) {
> var evaluated = eval("foo");
> print(evaluated);
> var loaded = load({ name: "foo.js", script: "foo" });
> print(loaded);
> }
>
> $ jrunscript scopes.js
> bar
> script error in file scopes.js : ReferenceError: "foo" is not defined in
> foo.js at line number 1
>
> This is with jdk1.8.0_20.
>
> -- David P. Caldwell
> http://www.davidpcaldwell.com/
More information about the nashorn-dev
mailing list