阅读有关Function
构造函数和function
声明之间区别的mdn文档。此处指定的示例在浏览器上以及在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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句