gpt4 book ai didi

javascript - Node.js 全局评估,抛出 ReferenceError

转载 作者:数据小太阳 更新时间:2023-10-29 05:22:54 24 4
gpt4 key购买 nike

我正在尝试从 Rhino 书中学习 JavaScript。我试图执行书中关于 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'

但是,当尝试使用 geval() 别名时,我在 g() 函数中得到了一个 ReferenceError:

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 中执行相同的代码时,它似乎非常有效!奇怪!

最佳答案

问题是您正在从一个模块运行此代码,其中 var y = global; 实际上在 模块范围 中定义了 y,不是全局范围。

In browsers, the top-level scope is the global scope. That means that in browsers if you're in the global scope var something will define a global variable. In Node this is different. The top-level scope is not the global scope; var something inside a Node module will be local to that module.

http://nodejs.org/api/globals.html#globals_global

因此,使它在 Node 中工作的两种可能方法是:

  1. 在 Node REPL 中按原样运行它
  2. 在模块中运行它,但将 var y = global; 替换为 y = global;

关于javascript - Node.js 全局评估,抛出 ReferenceError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24522719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com