阅读 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/