gpt4 book ai didi

javascript - 无法在 Node.js ES6 中使用 eval 创建变量

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:20 25 4
gpt4 key购买 nike

似乎无法在 Node.js ES6 中使用 eval 创建变量,但我不明白为什么。我在 CentOS 7 上发生过这种情况,但我不认为操作系统是这里的问题。

常规 Node.js 文件 (test.js):

eval("var a=1");
console.log(a);

使用 .mjs 扩展名制作相同的文件以使用 Node.js ES6 运行(test.mjs):

eval("var a=1");
console.log(a);

之后,使用 Node.js 和 Node.js ES6 运行这 2 个文件:

$ node test.js
1

$ node --experimental-modules test.mjs
(node:9966) ExperimentalWarning: The ESM module loader is experimental.
ReferenceError: a is not defined
at file:///temp/test.mjs:2:13
at ModuleJob.run (internal/modules/esm/module_job.js:96:12)

这是与 ES6 相关的问题吗?我在浏览器的控制台上尝试过,问题是一样的:

>> eval("var a=1"); console.log(a);
1

>> class c { static f(){ eval("var a=1"); console.log(a); } }
c.f()
ReferenceError: a is not defined

我使用的是 Node.js 10.9.0,这是一个错误还是背后有原因?

最佳答案

在严格模式下,在 eval() 语句内创建的变量仅适用于该代码。它不会在本地作用域中创建新变量(这里有关于该主题的 good article),而当不处于严格模式时,它可以在本地作用域中创建变量。

并且,mjs 模块默认以严格模式运行。默认情况下,常规的 Node.js 脚本文件不处于严格模式。因此,严格模式设置的差异会导致 eval() 的行为有所不同。

关于javascript - 无法在 Node.js ES6 中使用 eval 创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52160557/

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