javascript - 尝试访问函数构造函数内部的变量时出现引用错误

标签 javascript node.js

阅读 mdn 文档,了解 Function 之间的区别构造函数和 function宣言。此处指定的示例适用于浏览器以及 node.js repl,但在通过文件尝试时,node.js 进程因此错误而崩溃ReferenceError: x is not defined这是程序

var x = "bar";

function test() {
    var x = "baz";
    return new Function("return x;");
}

var t = test();
console.log(t());

从带有 node.js 的文件执行时,此示例无法按预期工作的可能原因是什么?

最佳答案

在 Node REPL 中,您输入代码的词法位置是顶层,相当于在 <script> 的顶部输入内容。浏览器中的标签。
var 定义的变量在顶层被分配给全局对象。所以,在 Node 的 REPL 和浏览器中,你的

var x = "bar";
结果 x分配给全局对象。
但是,相反,当您从文件运行代码时,例如 node bar.js ,运行的代码在模块内部 - 它不在顶层,因此在此类脚本的顶层声明的变量不会分配给全局对象。
创建的函数是全局的,在顶层,所以它只能在词法上“看到”在顶层定义的变量。所以,在Node中将代码作为文件运行时,由于运行的代码的作用域不是顶层,所以创建的函数看不到x任何地方,所以一个 ReferenceError 是结果。

关于javascript - 尝试访问函数构造函数内部的变量时出现引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63662783/

相关文章:

javascript - 在 Rails 4 中提供单个 JS 和 CSS 文件?

node.js - 我可以直接从 node.js 运行 .coffee 文件吗?

Node.js 垃圾收集

javascript - beforeUpdate 似乎没有被调用

node.js - 我可以使用 XML 创建 REST API 作为响应吗?

javascript - 如何为复选框调用多个图像

javascript - 在函数内检测哪个元素称为函数而不将其作为参数传递?

javascript - JSON.解析: unexpected character at line 1 column 1 of the JSON data (php)

javascript - 如何使用 Javascript 显示我最新推文状态的链接?

node.js - 如何使用 'require' 而不是 'import' 语句