Node.js Глобальный eval, выбрасывая ReferenceError

Я пытаюсь выучить JavaScript из книги Rhino. Я пытался выполнить следующий код из книги в отношенииeval(), Я использую node.js (v0.10.29) для выполнения примеров.

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'

Тем не менее, я получаюReferenceError внутриg() функция, когда есть попытка использоватьgeval() псевдоним:

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) 

Из того, что я понимаю, когда я псевдонимeval() какgeval()код в передаваемой строке оценивается в глобальном масштабе согласно ES5. Тем не менее, я сталкиваюсь сReferenceError и не в состоянии понять, почему.

Хотя я бы не стал считатьeval() чтобы быть критической особенностью, я определенно хотел бы понять, почему я сталкиваюсь с таким поведением.

Постскриптум Когда я пытаюсь выполнить тот же код в Google Chrome, кажется, это работает как шарм! Странный!

Ответы на вопрос(1)

Ваш ответ на вопрос