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!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage