Node.js Global eval, löst ReferenceError aus
Ich versuche, JavaScript aus dem Rhino-Buch zu lernen. Ich habe versucht, den folgenden Code aus dem Buch in Bezug auf auszuführeneval()
. Ich verwende node.js (v0.10.29), um die Beispiele auszuführen.
var geval = eval; // aliasing eval to geval
var x = 'global'; // two global variables
var y = 'global';
function f () {
var x = 'local'; // define a local variable
eval('x += "changed";'); // direct eval sets the local variable
return x;
}
function g () {
var y = 'local'; // define a local variable
geval('y += "changed";'); // indirect eval sets global variable
return y;
}
console.log(f(), x); // => expected 'localchanged global'
console.log(g(), y); // => expected 'local globalchanged'
Ich bekomme jedoch eineReferenceError
in derg()
Funktion, wenn versucht wird, die zu verwendengeval()
alias:
undefined:1
y += "changed";
^
ReferenceError: y is not defined
at eval (eval at g (/Users/codematix/Learning/learnjs/expressions.js:148:3), <anonymous>:1:1)
at eval (native)
at g (/Users/codematix/Learning/learnjs/expressions.js:148:3)
at Object.<anonymous> (/Users/codematix/Learning/learnjs/expressions.js:153:3)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
Nach dem, was ich verstehe, wenn ich Pseudonym bineval()
wiegeval()
Wird der Code in der übergebenen Zeichenfolge im globalen Bereich gemäß ES5 ausgewertet. Ich laufe jedoch in dieReferenceError
und nicht in der Lage zu verstehen, warum.
Obwohl ich nicht in Betracht ziehen würdeeval()
Um ein kritisches Merkmal zu sein, möchte ich auf jeden Fall verstehen, warum ich auf dieses Verhalten stoße.
P.S. Wenn ich versuche, den gleichen Code in Google Chrome auszuführen, scheint es wie ein Zauber zu funktionieren! Seltsam!